0

次のコマンドを実行すると:

if [ -d "~/Desktop" ]; then echo "exists"; fi
if [ -d "/bin" ]; then echo "exists"; fi

最初のコマンドは何もエコーしませんが、2 番目のコマンドは「存在します」とエコーします。「~」がbashで認識されないのはなぜですか? らしい

if [ -d ~/Desktop ]; then echo "exists"; fi
if [[ -d ~/Desktop ]]; then echo "exists"; fi

動作します。~ で引用符を使用することは可能ですか? シェルはバッシュです。ありがとう!

4

3 に答える 3

5

~引用符内では展開されません。試す

if [ -d "$HOME/Desktop" ]; then echo "exists"; fi
于 2013-07-09T04:37:21.047 に答える
1

あなたの場合、つまり"~/Desktop"、チルダはリテラルとして扱われるため展開されません。

eval拡張に使用:

dir="~/Desktop"
eval dir=$dir
if [ -d "$dir" ]; then echo "exists"; fi
于 2013-07-09T04:36:51.977 に答える
1

~ を $HOME に置き換えてみてください。チルダの展開は、チルダが引用符で囲まれていない場合にのみ発生します

代わりに次を使用します。

if [ -d "$HOME/Desktop" ]; then echo "exists"; fi
于 2013-07-09T04:40:57.050 に答える