Большинство команд, которые принимают --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:
cat >>.rspec-test <<EOF
--no-color
--format-doc
--no-profile
EOF