我有以下脚本
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
我知道我的文件在那里,我认为这可能与 ~/ ?
它永远找不到文件
我有以下脚本
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:字符串拆分在分配中被禁用,所以这不是问题。