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