如何使用 bash 将多行追加到文件中,字符串前面带有“--”

如何使用 bash 将多行追加到文件中,字符串前面带有“--”

问题非常类似于如何使用 bash 将多行追加到文件中但我想以 开始文件--,如果可能的话,还附加到文件。

printf "--no-color\n--format-doc\n--no-profile\n" >> ~/.rspec-test

问题是以“--”开头的文件给了我一个:

-bash: printf: --: invalid option
printf: usage: printf [-v var] format [arguments]

有办法逃脱吗--?还有其他选择吗?我不确定如何使用 来执行多行操作echo,这cat不是一个好的选择,我想将其放在自动脚本中。

答案1

--foo大多数接受作为选项的命令--本身也接受作为“选项结束,参数开始”标记 - 所以你可以这样做:

printf -- "--no-color\n--format-doc\n--no-profile\n" >> ~/.rspec-test

但对您的确切示例的更具体答案是 printf 的第一个参数是格式说明符,并且您不使用 printf 的格式化功能使事情变得比必要的更加困难。这将是做你想做的事情的更好方法:

printf "%s\n" --no-color --format-doc --no-profile >> ~/.rspec-test

这告诉 printf 获取它获取的每个参数并打印它,后跟一个换行符。比重复自己更容易,并且它避免了您面临的\n主要问题。并且它消除了转义字符串可能包含的--任何符号的需要。%

至于如何使用 进行多行操作echo,您可以使用:

echo -ne "--no-color\n--format-doc\n--no-profile\n" >> ~/.rspec-test

或者,更便携:

{ echo --no-color; echo --format-doc; echo --no-profile; } >> ~/.rspec-test

或者将 cat 与此处文档一起使用:

cat >>.rspec-test <<EOF
--no-color
--format-doc
--no-profile
EOF

相关内容