echoコマンドとリダイレクト演算子を使用してファイルを作成したいのですが、ファイルは数行で作成する必要があります。
文字列内に「\ n」による改行を含めようとしました:
echo "first line\nsecond line\nthirdline\n" > foo
しかし、この方法では、3行のファイルは作成されず、1行と文字列の逐語的な内容のみのファイルが作成されます。
このコマンドのみを使用して複数行のファイルを作成するにはどうすればよいですか?
echoコマンドとリダイレクト演算子を使用してファイルを作成したいのですが、ファイルは数行で作成する必要があります。
文字列内に「\ n」による改行を含めようとしました:
echo "first line\nsecond line\nthirdline\n" > foo
しかし、この方法では、3行のファイルは作成されず、1行と文字列の逐語的な内容のみのファイルが作成されます。
このコマンドのみを使用して複数行のファイルを作成するにはどうすればよいですか?
回答:
echo
コマンドでいくつかの構文を使用するように要求しました:
echo $'first line\nsecond line\nthirdline' > foo
(しかし、あなたが得た他の答えも考慮してください。)
この$'...'
構造は、埋め込まれたANSIエスケープシーケンスを展開します。
エコーが文字エスケープで行うことは、実装定義です。エコーの多くの実装(ほとんどの最新のものを含む)では、渡された文字列はデフォルトではエスケープについてまったく検査されません。
GNU bash(組み込みとして)によって提供されるエコー、および他のいくつかのエコーバリアントを使用すると、次のようなことができます。
echo -en 'first line\nsecond line\nthird line\n' > file
しかし、それは本当にあなたが望むように聞こえますprintf
。これは私の目にはより読みやすく、よりポータブルです(この機能はPOSIXによって定義されています):
printf '%s\n' 'first line' 'second line' 'third line' > file
また、hereドキュメントの使用を検討することもできます。
cat > file << 'EOF'
first line
second line
third line
EOF
echo -en 'text..'
には、受け入れられた答えは改行文字(\n
)を認識しませんでしたecho -en
が、そうでした。
以下に、echo
コマンドを使用して複数行ファイルを作成する他の方法をいくつか示します。
echo "first line" > foo
echo "second line" >> foo
echo "third line" >> foo
ここで、2番目と3番目のコマンドは>>
リダイレクト演算子を使用します。これにより、コマンドの出力がファイルに追加(追加)されます(この時点で既に存在しているはずです)。
または
(echo "first line"; echo "second line"; echo "third line") > foo
ここで、括弧はecho
コマンドを1つのサブプロセスにグループ化します。サブプロセスは、複数の行を出力する単一のプログラム(ls
たとえば、)のように見え、動作します。
上記の微妙なバリエーションは
{ echo "first line"; echo "second line"; echo "third line";} > foo
これは、サブプロセスを作成しないという点で、2番目の答えよりもわずかに効率的です。ただし、構文は少し複雑です。の後にスペースが必要{
で、の前にセミコロンが必要}
です。
シェルの制御およびリダイレクト演算子とはを参照してください。詳細については。
POSIX 7ではできない
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html
-e
定義されておらず、バックスラッシュは実装定義です:
最初のオペランドが-nの場合、またはいずれかのオペランドに<バックスラッシュ>文字が含まれている場合、結果は実装定義です。
オプションのXSI拡張機能がない場合。
printf
代わりに使用してください:
formatオペランドは、XBD File Format Notation [...]で説明されているフォーマット文字列として使用されます。
\ n <newline>印刷位置を次の行の先頭に移動します。
また、Ubuntu 15.10とほとんどのディストリビューションはecho
両方を次のように実装していることに注意してください。
help echo
which echo
混乱を招く可能性があります。
echo
システムで利用可能なすべてのシェルにビルトインます。Ubuntuでは、通常/ bin / shはダッシュですが、bashもデフォルトで付属しています。zsh、rc、mksh、yash、csh、tcsh、ksh93 ...はすべて、異なる動作を持つ独自のエコーを持ちます。which echo
すべてのシェルでシステムエコーのパスが表示されないことに注意してください。
which
元々(80年代に)cshユーザー専用のcshスクリプト(〜/ .cshrcからエイリアスをロード)であり、一部のシステムにはまだあります。which
zshおよびtcshに組み込まれています。