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

Suc*_*hem 9 options shell-script

问题与如何使用 bash 将多行附加到文件非常相似,但我想用 开始--文件,如果可能,还附加到文件。

printf "--no-color\n--format-doc\n--no-profile\n" >> ~/.rspec-test
Run Code Online (Sandbox Code Playgroud)

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

-bash: printf: --: invalid option
printf: usage: printf [-v var] format [arguments]
Run Code Online (Sandbox Code Playgroud)

有没有办法逃脱--?有没有其他选择?我不确定如何使用 做多行echocat这不是一个好的选择,我想将它放在自动脚本中。

god*_*eek 16

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

printf -- "--no-color\n--format-doc\n--no-profile\n" >> ~/.rspec-test
Run Code Online (Sandbox Code Playgroud)

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

printf "%s\n" --no-color --format-doc --no-profile >> ~/.rspec-test
Run Code Online (Sandbox Code Playgroud)

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

至于如何用 做多行echo,你可以使用:

echo -ne "--no-color\n--format-doc\n--no-profile\n" >> ~/.rspec-test
Run Code Online (Sandbox Code Playgroud)

或者,更便携:

{ echo --no-color; echo --format-doc; echo --no-profile; } >> ~/.rspec-test
Run Code Online (Sandbox Code Playgroud)

或者将 cat 与 here-doc 一起使用:

cat >>.rspec-test <<EOF
--no-color
--format-doc
--no-profile
EOF
Run Code Online (Sandbox Code Playgroud)