コマンド1:
$ rm hello.txt 2>/dev/null || { echo “Couldn’t delete hello.txt” }
"Couldn't delete hello.txt"
コマンド2
$ rm hello.txt 2>/dev/null || { echo 'Couldn’t delete hello.txt' }
Couldn't delete hello.txt
メモ: hello.txt
現在のディレクトリには存在しません。
答え1
最初のコマンド
rm hello.txt 2>/dev/null || { echo “Couldn’t delete hello.txt” }
<U+201C>
(左二重引用符)、<U+2019>
(右一重引用符)、および(右二重引用符)文字を含みます。これらの文字<U+201D>
はシェルについて特別な内容がなく、そのまま出力されます。
2番目の順序
rm hello.txt 2>/dev/null || { echo 'Couldn’t delete hello.txt' }
一重引用符で囲まれた文字列を含みます。との間n
の文字はシェルに特別ではありません。t
<U+2019>
答え2
このペア“”
はスマート見積。同様に、あなたの’
inはCouldn’t
賢明な引用です。
一般的な名言とは違うのでカール引用された部分の始まりと終わりを区別してください。すべてではなくても、ほとんどのプログラミング/スクリプト言語では意味がありません。他のUnicode文字と同じように動作することを知っています。
したがって、最初のエントリにはecho
実際に参照がなく、コマンドは次の単語を受け取ります。別のパラメータとして。簡単に確認できます。
$ for s in “Couldn’t delete hello.txt”; do echo $s; done
“Couldn’t
delete
hello.txt”
$ for s in 'Couldn’t delete hello.txt'; do echo $s; done
Couldn’t delete hello.txt
実際に出力が無効です(実際にコピーして貼り付けましたか?)丸い引用符があるので、出力echo
は上記の例のようにまだ丸い引用符でなければなりません。
ご覧のとおり、2番目のケースは一つ文字列にASCIIの範囲外のUnicode文字が含まれているため、引用符はシェルから削除されます。