次: Parentheses, 前: Shell Substitutions, 上: Portable Shell
列にいくつかの変数を設定するとき,評価の順序が定義されていないことを覚え
ておいてください.例えば,`foo=1 foo=2; echo $foo'は,Solarisの
sh
では`1'になりますが,Bashでは`2'になります.順序を強
制するために`;'を使用する必要があります.`foo=1; foo=2; echo
$foo'のようにします.
subdir/programを見つけるために,以下に依存しないようにしてくださ い.
PATH=subdir$PATH_SEPARATOR$PATH program
これはZsh 3.0.6では動作しません.代わりに以下のようなものを使用してくだ さい.
(PATH=subdir$PATH_SEPARATOR$PATH; export PATH; exec program)
代入の終了ステータスに依存しないようにしてください.Ash 0.2はステータス を変更せず,最後の文に伝搬します.
$ false || foo=bar; echo $? 1 $ false || foo=`:`; echo $? 0
そして,更に悪いことに,QNX 4.25はあらゆる場合で終了ステータス を0に設定します.
$ foo=`exit 1`; echo $? 0
デフォルト値を代入するために,以下のアルゴリズムを使用してください.
: ${var='my literal'}
: ${var="$default"}
var=${var="$default"}
test "${var+set}" = set || var='${indirection}'
ほとんどの場合,`var=${var="$default"}'で良いのですが,駄目なとき は後者を使用してください.正当性のための, `${var:-value}'と`${var=value}' の 項目は,See Shell Substitutions.