我已经阅读了其他一些问题,我觉得我和其他人一样,但我找不到文件。
file="~/.todo/$1.task"
if [ ! -f "$file" ]; then
echo "Error. Task ~/.todo/$1.task not found."
ls ~/.todo/
exit 1
fi
当del被调用时,这是一个函数内部....所以使用这个命令,这是输出:
$ ./todo.sh del 19
Error. ~/.todo/19.task not found.
10.task 13.task 16.task 1.task 6.task 9.task tododatesorted
11.task 14.task 18.task 3.task 7.task taskno
12.task 15.task 19.task 4.task 8.task tododates
为什么它真的不存在呢?我已经尝试了-e和-f标志,虽然我不完全理解其中的区别。
答案 0 :(得分:7)
不同之处在于路径名扩展。如果~
未加引号,则shell会将其扩展到您的主目录。但是当它在引号内时,就像你拥有它一样,它不会被扩展。 E.g。
$ file="~"; echo $file
~
$ file=~; echo $file
/Users/kevin
您可以通过以下两种方式之一修复脚本:
file=~/.todo/$1.task
。对于像这样的变量赋值,$1
中的空格不会破坏命令,但如果需要,可以引用$1
。$HOME
:file="$HOME/.todo/$1.task"
答案 1 :(得分:1)
当你检查"$file"
时,我不认为代字号扩展正在发生。所以文件名
它正在寻找仍然具有波浪形的角色,而不是扩展到
主目录。
答案 2 :(得分:0)
在Bash中,您可以执行以下操作:
unexpanded_file="~/example.txt"
file="${unexpanded_file/#\~/$HOME}"
这应将〜替换为$ HOME
答案 3 :(得分:-4)
尝试摆脱';'在......之后......我不确定,我不能尝试。