バッククオート便利
変数にコマンドの実行結果を代入するには、以下のようにバッククオート (もしくは $()
) を使う。
hello.sh
#! /bin/sh
function hello() {
echo 'こんにちは'
}
reply=`hello`
echo $reply
危険な香り
多用したくなりがちなバッククオートだが、グローバル変数の操作に関しては注意が必要。
global_variable_test.sh
#! /bin/sh
# グローバル変数
C=""
# グローバル変数を変更する関数
function changeC() {
C='変更しました'
}
C="変更してません"
changeC # 普通に呼び出す。
echo 'changeC 実行'
echo "C=$C" # 変わるはず
echo '--------------------------------'
C="変更してません"
TEMP=`changeC` # バッククオートで呼び出す。
echo 'changeC バッククオート実行'
echo "C=$C" # 変わるはず
なんとなく結果が予想できそうな気もするが、後者の方法ではCが変更されない。
text
$ ./test.sh
changeC 実行
C=変更しました
--------------------------------
changeC バッククオート実行
C=変更してません
サブシェルとして実行されて、別アドレスのC
を参照しちゃうんでしょうか?