波浪号 (~/) 不适用于 if 然后 shell 脚本中的语句



我有以下脚本

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

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

它永远不会找到文件

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

checkfile=~/mysql_backup/"$file"

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

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

在此上下文中,~ 等效于 $HOME ,后者双引号字符串中扩展,因此您可以编写:

checkfile="$HOME/mysql_backup/$file"

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

相关内容

  • 没有找到相关文章

最新更新