我有以下脚本
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
我知道我的文件在那里,我在想它可能与〜/?
有关它永远找不到文件
答案 0 :(得分:7)
双引号(实际上,任何引号)都会阻止~
展开。改为使用:
checkfile=~/mysql_backup/"$file"
...或者更好的是,在所有脚本中使用$HOME
,并将~
视为仅供交互/人工使用的工具。
答案 1 :(得分:0)
~
字符未在双引号字符串中展开。
在此上下文中,~
相当于$HOME
,其中 在双引号字符串中展开,因此您可以写:
checkfile="$HOME/mysql_backup/$file"
当后跟用户名时,~
引用该用户的主目录,该目录不被任何环境变量跟踪; "~fred/"
不会扩展,但编写在该上下文中正确扩展的内容会更加困难。 你可以将它留在引号之外,但是如果主目录路径包含一个空格 - 这可能会导致问题 - 我希望永远不会发生这种情况。 更正,多亏了Charles Duffy:字符串拆分已在作业中禁用,因此不会出现问题。