echo
直接呼び出すと、動作が少し異なることに気づきました
root$echo "line1\nline2"
スクリプトを介して呼び出された場合:
#! /bin/sh
echo "line1\nline2"
[...]
最初のケースは次のように出力します。
line1\nline2
、後者は印刷しますが
line1
line2
それで、スクリプトで使用されるとき、echo
常にフラグを持っていると想定されますか?-e
スクリプトにはのシバン行が#! /bin/sh
ありますが、インタラクティブシェルはおそらくBashです。Bashの動作が必要な場合は、#! /bin/bash
代わりにスクリプトをに変更してください。
2つのプログラムsh
とbash
は異なるシェルです。/bin/sh
とが同じプログラムであるシステムでも/bin/bash
、それを呼び出すために使用するコマンドに応じて動作が異なります。( Bashのモードではデフォルトでオンにecho
なっているようには動作しませんが、実際にオンになっているシステムを使用している可能性があります。)-e
sh
sh
dash
プロンプトで入力すると、スクリプトと同じように動作するsh
ことがわかります。echo
しかしsh
、インタラクティブに使用するための非常にフレンドリーなシェルではありません。
最大限に移植可能なシェルスクリプトを作成しようとしている場合は、バニラsh
構文に固執する必要がありますが、広範囲に配布するために作成していない場合は、Bashスクリプトを使用できます。実際、Bashスクリプトbash
は、シバン行を挿入します。
ちなみに、このecho
コマンドは、おそらくシェル間で最も一貫性のないコマンドです。したがって、移植性を求める場合は、まっすぐな、オプションのない、エスケープのない、常に改行のない出力以外の目的で、移植性を完全に回避することをお勧めします。かなりポータブルなオプションの1つはprintfです。