3

我有以下脚本

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

我知道我的文件在那里,我认为这可能与 ~/ ?

它永远找不到文件

4

2 回答 2

11

双引号(实际上是任何引号)防止~被扩展。改用:

checkfile=~/mysql_backup/"$file"

...或者,更好的是,$HOME在所有脚本中使用,并考虑~成为仅供交互/人类使用的设施。

于 2014-12-01T22:27:18.917 回答
1

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

在这种情况下,~等价于在双引号字符串中展开的 ,因此您可以$HOME编写

checkfile="$HOME/mysql_backup/$file"

后跟用户名时,~指的是该用户的主目录,不被任何环境变量跟踪;"~fred/"不会扩展,但是在这种情况下编写可以正确扩展的东西更加困难。您可以将其保留在引号之外,但如果主目录路径包含空格,则可能会导致问题——我希望这永远不会发生。 更正,感谢 Charles Duffy:字符串拆分在分配中被禁用,所以这不是问题。

于 2014-12-01T22:30:32.797 回答