我有一个正在执行 sed 命令的 shell 脚本。变量扩展时,它引用文件名。
sed -i "$3d" $filename
变成
sed -i 1d '~/file'
如调试标志所示-x
。
运行时,这会产生
sed: can't read ~/file: No such file or directory
当我尝试手动运行该命令时,会发生同样的情况,除非我删除引号。
sed -i 1d ~/file
不带引号运行会产生所需的输出。
答案1
问题是文件名两边的引号。它们会阻止您的 shell 扩展~
到您的主文件夹。所以sed
正在寻找一个名为 的文件夹~
。
确保$filename
不包含引号或使用真实路径而不是~
。
答案2
这里的问题是你没有展示的部分。在该行之前的某个地方,您有类似这样的内容:
filename="~/file"
所以问题不在于后面的使用$filename
被引用,它没有被引用,如果名称包含空格,可能会引入其他问题。
~
如果 是单词的第一个字符,则 shell 会将其扩展到主目录。如果它是变量扩展的结果,则不会对其进行扩展。
您可以使用$HOME
代替~
:
filename=$HOME/file
sed -i "$3d" $filename
或者用引号更好:
filename="$HOME/file"
sed -i "$3d" "$filename"