0

当我运行以下命令时:

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

将工作。是否可以将引号与〜一起使用?外壳是 bash。谢谢!

4

3 回答 3

5

~不在引号内展开。尝试

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

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

而是使用:

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

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

用于eval扩展:

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