我有以下脚本
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:字符串拆分在分配中被禁用,所以这不是问题。