Sebagian besar perintah yang menerima --foo
sebagai opsi juga menerima --
dengan sendirinya sebagai penanda "akhir opsi, mulai argumen" - sehingga Anda dapat melakukan:
printf -- "--no-color\n--format-doc\n--no-profile\n" >> ~/.rspec-test
Tetapi jawaban yang lebih spesifik untuk contoh persis Anda adalah bahwa argumen pertama untuk printf adalah penentu format, dan Anda membuat hal-hal lebih sulit daripada yang diperlukan dengan tidak menggunakan printf untuk kemampuan formatnya. Ini akan menjadi cara yang lebih baik untuk melakukan apa yang Anda inginkan:
printf "%s\n" --no-color --format-doc --no-profile >> ~/.rspec-test
Itu memberitahu printf untuk mengambil setiap argumen yang didapat dan mencetaknya, diikuti oleh baris baru. Lebih mudah daripada mengulangi \n
diri Anda sendiri, dan itu menghindari --
masalah utama yang Anda hadapi. Dan itu menghilangkan kebutuhan untuk melarikan diri dari %
tanda-tanda bahwa string Anda mungkin berisi.
Adapun cara melakukan beberapa baris dengan echo
, Anda bisa menggunakan:
echo -ne "--no-color\n--format-doc\n--no-profile\n" >> ~/.rspec-test
Atau, jauh lebih mudah dibawa:
{ echo --no-color; echo --format-doc; echo --no-profile; } >> ~/.rspec-test
Atau menggunakan kucing bersama dengan dokumen-sini:
cat >>.rspec-test <<EOF
--no-color
--format-doc
--no-profile
EOF