Die meisten Befehle, die --foo
als Option akzeptiert werden, akzeptieren auch --
von sich aus als Markierung "Ende der Optionen, Beginn der Argumente". Sie können also Folgendes tun:
printf -- "--no-color\n--format-doc\n--no-profile\n" >> ~/.rspec-test
Die spezifischere Antwort auf Ihr genaues Beispiel ist jedoch, dass das erste Argument für printf ein Formatbezeichner ist und Sie die Dinge schwieriger als nötig machen, indem Sie printf nicht für seine Formatierungsfähigkeiten verwenden. Dies wäre ein besserer Weg, um das zu tun, was Sie wollen:
printf "%s\n" --no-color --format-doc --no-profile >> ~/.rspec-test
Das sagt printf, dass es jedes Argument nehmen und drucken soll, gefolgt von einer neuen Zeile. Einfacher als sich selbst zu wiederholen \n
, und es vermeidet das --
Hauptproblem, mit dem Sie konfrontiert waren. Und es entfällt die Notwendigkeit, sich jeglichen %
Anzeichen zu entziehen , die Ihre Saiten enthalten könnten.
Für das Erstellen mehrerer Zeilen echo
können Sie Folgendes verwenden:
echo -ne "--no-color\n--format-doc\n--no-profile\n" >> ~/.rspec-test
Oder viel tragbarer:
{ echo --no-color; echo --format-doc; echo --no-profile; } >> ~/.rspec-test
Oder verwenden Sie Katze zusammen mit einem Here-Doc:
cat >>.rspec-test <<EOF
--no-color
--format-doc
--no-profile
EOF