引用符を使用または使用せずに変数を定義することの違いは何ですか? [コピー]

引用符を使用または使用せずに変数を定義することの違いは何ですか? [コピー]

引用符で変数を定義する場合:

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コマンドは、そのディレクトリが何であれ、現在のディレクトリのファイルのみを一覧表示します。

おすすめ記事