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


9

问题与如何使用bash将多行追加到文件中非常类似,但是我想使用来启动文件--,并且如果可能的话还希望追加到文件中。

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

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

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

有办法逃脱--吗?有其他选择吗?我不确定如何使用进行多行操作echocat也不是一个好选择,我想将其包含在自动化脚本中。

Answers:


17

大多数接受--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一起使用here-doc:

cat >>.rspec-test <<EOF
--no-color
--format-doc
--no-profile
EOF
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.