現在、会社の以前の従業員が作成したいくつかのスクリプトを復号化しようとして、多くのスクリプトが次の特定のコマンドに変数を割り当てる次のステートメントを見つけました。
CAT=cat
GREP=grep
SED=sed
後でスクリプトで通常のコマンドの代わりに次の変数を使用していることがわかります。
$GREP -v "^#" `dirname $0`/abcdfilename | while read line
do
<some loop operations>
done
直接使用する代わりに、この変数を使用することはgrep
意味がありません。私の質問は次のとおりです
- このようにgrepまたはsed(私たちの場合)を実行するにはどういう意味がありますか?
- これは、他の人が理解しにくくするためにスクリプトを作成したい人の結果ですか?
- それとも、これは間違ったスクリプトの例ですか?
ベストアンサー1
標準コマンドはシステムで異なる方法で実装されます。 Solaris 10以前と同様に、/bin/sh
古いBourneシェルと/usr/xpg4/bin/sh
POSIX互換シェルがあります。またはOSXでは、呼び出し時にBSD sedを使用sed
しますgsed
。スクリプトで使用する実装を選択できます。
したがって、変数を使用すると、スクリプト内の実装を変更する方が簡単です。 GNU sedが必要な場合:
SED=gsed
変数を使用しない場合は、sed
スクリプト内のすべての項目を置き換える必要があります。これは簡単に実行できますが、これは間違ったプログラミング習慣と見なされます。