提问人:timewalker 提问时间:3/16/2023 更新时间:3/16/2023 访问量:70
如何在 bash 脚本中将一些内容添加到文件名包含空格的文件中?
How can I add some content to a file whose filename contains space in bash script?
问:
我的代码喜欢
target_file="target/middle dir/filename"
echo -e "Something New\n$(cat $target_file)" > "$target_file"
它失败了,并出现错误:
cat target/middle: Is a directory
cat : No such file or directory
cat 无法处理包含空格的文件路径。
我尝试了以下内容:
echo -e "Something New\n$(cat \"$target_file\")" > "$target_file"
没有运气。
和解决方案?
答:
0赞
Master Yoda
3/16/2023
#1
最接近您的解决方案的是:
echo -e "Something New\n$(cat "$target_file")" > "$target_file"
然而,对我来说,这个看起来更好:
echo -e "Something New\n`cat "$target_file"`" > "$target_file"
也可以使用 sed(以避免在命令中调用 command):
sed -i '1iSomething New' "$target_file"
1赞
M. Nejat Aydin
3/16/2023
#2
除了报价问题外,在一个命令中读取和写入同一文件也可能会引发问题。以下是编写脚本的一种方法:
target_file="target/middle dir/filename"
{ echo "Something New"; cat "$target_file"; } > "$target_file".temp~ &&
mv "$target_file".temp~ "$target_file"
另外,您不应该使用 ;它不是可移植的,对于您的情况,如果文件内容包含反斜杠字符(将尝试解释它们),则可能会出现问题。echo -e
-e
评论
"$target_file"
$target_file
$(...)
cat
$target_file
cat
"target/middle
dir/filename"