如果引用文件,Sed 找不到文件

如果引用文件,Sed 找不到文件

我有一个正在执行 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"

相关内容