Tilde(〜/)如果在Shell脚本中使用then语句则不起作用

时间:2014-12-01 22:24:20

标签: file shell if-statement

我有以下脚本

file=${file:-letsdump.sh}    
checkfile="~/mysql_backup/$file"
if [ -e "$checkfile" ]; then
mv ~/mysql_backup/$file ~/mysql_backup/$file-bak-$(date +%d%m%Y_%H%M).bak
else
echo 'file doesnt exist'   
fi

我知道我的文件在那里,我在想它可能与〜/?

有关

它永远找不到文件

2 个答案:

答案 0 :(得分:7)

双引号(实际上,任何引号)都会阻止~展开。改为使用:

checkfile=~/mysql_backup/"$file"

...或者更好的是,在所有脚本中使用$HOME,并将~视为仅供交互/人工使用的工具。

答案 1 :(得分:0)

~字符未在双引号字符串中展开。

在此上下文中,~相当于$HOME,其中 在双引号字符串中展开,因此您可以写:

checkfile="$HOME/mysql_backup/$file"

当后跟用户名时,~引用该用户的主目录,该目录不被任何环境变量跟踪; "~fred/"不会扩展,但编写在该上下文中正确扩展的内容会更加困难。 你可以将它留在引号之外,但是如果主目录路径包含一个空格 - 这可能会导致问题 - 我希望永远不会发生这种情况。 更正,多亏了Charles Duffy:字符串拆分已在作业中禁用,因此不会出现问题。