引用符で変数を定義する場合:
TEMP="~/Dropbox"
それから
ls $TEMP
動作しません。代わりに
echo $TEMP | ls
働く
同じ結果を得るには、引用符なしで変数を定義することもできます。
TEMP=~/Dropbox
これにより、簡単に入力できます。
ls $TEMP
私はそれらの違いについて混乱し、いつどこでこれら2つの定義をそれぞれ使用する必要があるかを知りたいと思います。
ベストアンサー1
TEMP="~/Dropbox"
上記は、リテラルチルダとスラッシュを含む変数を定義します。引用符で囲まれているため、シェルは~/
ホームディレクトリに展開されません。観察する:
$ echo "quotes=~/" noquotes=~/
quotes=~/ noquotes=/home/john1024/
~/
したがって、ホームディレクトリを表すには~/
引用符を外す必要があります。以下はうまくいきます:
TEMP=~/"Dropbox"
~/
引用符で囲むとどうなるか考えてみましょう。
TEMP="~/Dropbox"
ls $TEMP
~/Dropbox
上記のコマンドは、名前付きディレクトリにあるファイルを表すファイルを探します。名前付きディレクトリが存在しない可能性が高いため、「該当するファイルやディレクトリはありません」というエラーメッセージが返されます。Dropbox
~
~
ls
また、以下のコマンドは思ったように機能しません。
echo $TEMP | ls
ls
標準入力は無視されます。 barels
コマンドは、そのディレクトリが何であれ、現在のディレクトリのファイルのみを一覧表示します。