解析了什么?

时间:2013-07-09 04:32:18

标签: bash

当我运行以下命令时:

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

第一个命令没有回音,第二个命令“存在”。为什么bash不理解“〜”?似乎

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

会奏效。是否可以使用〜? shell是bash。谢谢!

3 个答案:

答案 0 :(得分:5)

~未在引号内展开。尝试

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

答案 1 :(得分:1)

在您的情况下,即"~/Desktop",代字号不会扩展,因为它被视为文字。

使用eval展开:

dir="~/Desktop"
eval dir=$dir
if [ -d "$dir" ]; then echo "exists"; fi

答案 2 :(得分:1)

尝试用$ HOME替换〜。 仅在波浪线未加引号时发生Tilde扩展

改为使用:

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