我安装了装有ZSH的Ubuntu 18.04。我有这个bash脚本,用于检查目录是否存在。
即使我有一个名为“〜/ .config”的目录,该条件始终为负。我似乎无法弄清楚我的代码出了什么问题。
setup.sh
#!/bin/bash
if [ -d "~/.config" ] ; then
echo "Directory exist"
else
echo "Does not exist"
fi
使用chmod +x ./setup.sh
使文件可执行
输出始终为Does not exist
答案 0 :(得分:5)
自从您编写了"~/.config"
以来,它将被视为原义字符串。要允许~
shell扩展,您需要不加引号:
#!/bin/bash
if [ -d ~/.config ] ; then
echo "Directory exist"
else
echo "Does not exist"
fi
Bash Pitfals, 26. echo "~"对此做了很好的解释:
26。回声“〜”
仅在'〜'不加引号的情况下才适用波浪号扩展。在此示例中,echo向标准输出写入“〜”,而不是用户主目录的路径。
引用相对于用户主目录表示的路径参数应使用$ HOME而不是'〜'。例如,考虑$ HOME为“ / home / my photos”的情况。
"~/dir with spaces" # expands to "~/dir with spaces" ~"/dir with spaces" # expands to "~/dir with spaces" ~/"dir with spaces" # expands to "/home/my photos/dir with spaces" "$HOME/dir with spaces" # expands to "/home/my photos/dir with spaces"`
答案 1 :(得分:2)
在bash中,双引号("..."
)抑制了全局和相关扩展,例如*
,~
等。
双引号保留shell变量的扩展;单引号('...'
)同时抑制全局扩展和shell变量扩展。因此,它们分别在不同的上下文中有用。
但是在需要*
,~
等有意义的上下文中,您需要未加引号的表达式。 ...请当心,因为如果不小心,由于膨胀可能会发生意料之外的事情。