A maioria dos comandos que aceitam --foo
como uma opção também aceitam --
como marcador "fim de opções, início de argumentos" - assim você pode fazer:
printf -- "--no-color\n--format-doc\n--no-profile\n" >> ~/.rspec-test
Mas a resposta mais específica para o seu exemplo exato é que o primeiro argumento para printf é um especificador de formato, e você está tornando as coisas mais difíceis do que o necessário ao não usar o printf para suas habilidades de formatação. Essa seria uma maneira melhor de fazer o que você quer:
printf "%s\n" --no-color --format-doc --no-profile >> ~/.rspec-test
Isso diz ao printf para pegar cada argumento e imprimi-lo, seguido por uma nova linha. Mais fácil do que repetir o \n
e evita o problema --
que você estava enfrentando. E elimina a necessidade de escapar de qualquer sinal de %
que suas strings possam conter.
Quanto a como fazer várias linhas com echo
, você pode usar:
echo -ne "--no-color\n--format-doc\n--no-profile\n" >> ~/.rspec-test
Ou muito mais portável:
{ echo --no-color; echo --format-doc; echo --no-profile; } >> ~/.rspec-test
Ou usando o cat junto com o here-doc:
cat >>.rspec-test <<EOF
--no-color
--format-doc
--no-profile
EOF