コマンドラインから複数行のファイルを作成するにはどうすればいいですか?

コマンドラインから複数行のファイルを作成するにはどうすればいいですか?

次の内容をファイルに入力するにはどうすればいいですか?

Hi
abcd

を使用しようとしましたecho "Hi\nabcd" >> ab.txtが、ファイルではそのまま記述されています(\n改行ではなく が含まれています)

答え1

echoエスケープシーケンスを尊重するように指示する必要があります。

echo -e "Hi\nabcd" >> ab.txt

答え2

の行動echo貝殻によって異なります¹;printfの動作はより標準的です。

printf "Hi\nabcd" >> ab.txt

¹「使用することはできませんエコーすべてのPOSIXシステム間で移植可能。-n(最初の引数として) エスケープ シーケンスは省略されます。"

答え3

使用することをお勧めしますbashシェルの機能と呼ばれるヒアドキュメントあなたが説明していることを実現するための最もエレガントな形式のようです。最も重要なのは、複数行のコンテンツが、出力ファイルとまったく同じように見えることです (判読不能な長い\n区切られた文字列とは対照的です)。

cat > ab.txt <<EOL
Hi
abcd
EOL

ここEOLは、シェルが検索するべきマーカーです。ここに文書偶然に矛盾しない単語を任意に選択することができます。ここに文書の内容自体です。${VARIABLES}置換されるシェルがあるのは良いことです。それが何らかの理由で望ましくない場合は、開始マーカー ワード (開始マーカー ワードのみ) を引用符 ( ') で囲んで、これを防止できます。

私は個人的に、環境を設定するときに小さな構成ファイルを作成するために、init スクリプトでこれをよく使用します。次のようなものです。

cat > ~/.screenrc <<END_OF_HEREDOC_MARKER
defscrollback ${MAX_LINES}
END_OF_HEREDOC_MARKER

答え4

引用符を使ってゲームをすることもできます:

 % echo 'Hi
> abcd' >> ab.txt

bash でそれを入力するには、「Hi」の後に「Enter」を押します。私の場合、bash はコマンド プロンプトの継続として「>」を使用します。何らかの理由で、個々のリターンをバックスラッシュでエスケープできませんでした。

関連情報