文字列の前に「-」を付けて、bashでファイルに複数の行を追加する方法


9

「bashを使用してファイルに複数の行を追加する方法」によく似た質問ですが、ファイルを--で開始し、可能であればファイルにも追加したいと考えています。

printf "--no-color\n--format-doc\n--no-profile\n" >> ~/.rspec-test

問題は、ファイルを「-」で開始することです。

-bash: printf: --: invalid option
printf: usage: printf [-v var] format [arguments]

エスケープする方法はあり--ますか?代替案はありますか?私が使用して複数の行を行う方法がわからないんだけどecho、とcat私は自動化されたスクリプトでそれをしたいのですが、良いオプションではありません。

回答:


17

--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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.