echoコマンドは、シェルスクリプトで何かを印刷するための便利な方法です。
デフォルトでは、常に改行文字が追加されます。したがって、複数のエコーコマンドを実行すると、各出力が新しい行に表示されます。
ただし、これは、echoコマンドを使用して改行を使用せずに印刷する必要がある場合には、不便になる可能性があります。
フィボナッチ数列を印刷しようとしていると想像してみてください:1、1、2、3、5、8、13、21、34、55
-n
を使用できます 改行なしで出力するechoコマンドのフラグ:
echo -n "Hello World"
HelloWorldの直後にプロンプトが同じ行に表示されていることに気付くでしょう。
もっと詳しく見てみましょう。
配列の内容をbashスクリプトで出力し、その出力を確認する単純なforループを見てみましょう。
$ bash_array=(1 2 3 4)
$ for i in ${bash_array[@]}; do
echo $i
done
1
2
3
4
ご覧のとおり、echoコマンドが実行されるたびに、出力が改行で表示されます。それが必要な場合もあれば、改行を開始せずに同じ行で出力を継続したい場合もあります。
「-n」フラグを満たします
echoコマンドのbash実装は通常、出力に「\ n」(改行を表すエスケープ文字)を追加します。 「-n」フラグは、出力に「\n」を追加しません。
$ bash_array=(1 2 3 4 5 6 7 8)
$ for i in ${bash_array[@]}; do
echo -n $i
done
12345678
ご覧のとおり、すべての番号が1行に表示されています。これは、echoコマンドが実行されるたびに、改行に出力されなかったことを意味します。
echo-nが機能しませんでした。さて、何ですか?
場合によっては、echo -n
を使用します -n
も出力します 改行なしでテキストを印刷する代わりに文字。
これは、使用しているシェルによるechoコマンドの個別の実装がある場合に可能です。
混乱している?一部のディストリビューションとシェルには、いくつかの組み込みシェルコマンドの独自の実装がある場合があります。 echoはそのようなコマンドの1つです。
ここにあなたが試すかもしれないいくつかのことがあります。
シバン文字の後に/bin/ bashを追加して、シェルスクリプトがbashシェルを使用するようにします。
#!/bin/bash
それでも問題が解決しない場合は、echoの代わりにprintfコマンドを使用してみてください。
デフォルトでは、printfは改行文字を追加しません:
printf "Something without newline"
改行文字を明示的に指定する必要があります\n:
printf "Something with newline\n"
printfコマンドはCのprintfコマンドのように動作し、より複雑なフォーマットの出力を印刷するために使用できます。
printfコマンドの動作ははるかに一貫しています。単純なものにはechoで問題ありませんが、もっと複雑なものにはprintfを使用することをお勧めします。
この簡単なチュートリアルが、bashスクリプトの改行の動作を制御するのに役立つことを願っています。