La maggior parte dei comandi che accettano --foo
come opzione accetta anche --
da sola come marcatore "fine delle opzioni, inizio degli argomenti", quindi puoi fare:
printf -- "--no-color\n--format-doc\n--no-profile\n" >> ~/.rspec-test
Ma la risposta più specifica al tuo esempio esatto è che il primo argomento di printf è un identificatore di formato e stai rendendo le cose più difficili del necessario non usando printf per le sue capacità di formattazione. Questo sarebbe un modo migliore per fare quello che vuoi:
printf "%s\n" --no-color --format-doc --no-profile >> ~/.rspec-test
Questo dice a printf di prendere ogni argomento che riceve e stamparlo, seguito da una nuova riga. Più facile che ripetere \n
te stesso ed evita il --
problema principale che stavi affrontando. E rimuove la necessità di sfuggire a qualsiasi %
segno che le stringhe potrebbero contenere.
Per quanto riguarda come fare più righe con echo
, è possibile utilizzare:
echo -ne "--no-color\n--format-doc\n--no-profile\n" >> ~/.rspec-test
O, molto più portabilmente:
{ echo --no-color; echo --format-doc; echo --no-profile; } >> ~/.rspec-test
O usando cat insieme a qui-doc:
cat >>.rspec-test <<EOF
--no-color
--format-doc
--no-profile
EOF