2

echo直接呼び出すと、動作が少し異なることに気づきました

root$echo "line1\nline2"

スクリプトを介して呼び出された場合:

#! /bin/sh

echo "line1\nline2"

[...]

最初のケースは次のように出力します。

line1\nline2

、後者は印刷しますが

line1
line2

それで、スクリプトで使用されるとき、echo常にフラグを持っていると想定されますか?-e

4

1 に答える 1

5

スクリプトにはのシバン行が#! /bin/shありますが、インタラクティブシェルはおそらくBashです。Bashの動作が必要な場合は、#! /bin/bash代わりにスクリプトをに変更してください。

2つのプログラムshbash異なるシェルです。/bin/shとが同じプログラムであるシステムでも/bin/bash、それを呼び出すために使用するコマンドに応じて動作が異なります。( Bashのモードではデフォルトでオンにechoなっているようには動作しませんが、実際にオンになっているシステムを使用している可能性があります。)-eshshdash

プロンプトで入力すると、スクリプトと同じように動作するshことがわかります。echoしかしsh、インタラクティブに使用するための非常にフレンドリーなシェルではありません。

最大限に移植可能なシェルスクリプトを作成しようとしている場合は、バニラsh構文に固執する必要がありますが、広範囲に配布するために作成していない場合は、Bashスクリプトを使用できます。実際、Bashスクリプトbashは、シバン行を挿入します。

ちなみに、このechoコマンドは、おそらくシェル間で最も一貫性のないコマンドです。したがって、移植性を求める場合は、まっすぐな、オプションのない、エスケープのない、常に改行のない出力以外の目的で、移植性を完全に回避することをお勧めします。かなりポータブルなオプションの1つはprintfです。

于 2012-05-14T21:41:55.027 に答える