スクリプト - 定義されていない場合は変数を無視

スクリプト - 定義されていない場合は変数を無視

HP-UX *** B.11.31 U ia64 ****無制限ユーザーライセンスこんにちは、

var1=abc
var2=xyz
touch $var1 $var2 $var3

変数の1つが設定されていない場合、コマンドは失敗します。

ksh: var3: parameter not set

コマンドが設定されていない/定義された変数を無視し、定義された変数のファイルを生成するにはどうすればよいですか? ifループはありません。タッチコマンドのすぐ内にあります。ありがとう

答え1

asまたはを呼び出してオプションをオンまたは実行してオプションをオンにすると、-uこのエラーメッセージが表示されます。kshksh -uksh -o nounsetset -uset -o nounset

$var1 $var2 $var3 タッチ

この変数がファイルモードのリストを含むことを意図していない限り、これはとにかく間違っています。

次のようなものでなければなりません。

touch -- "$var1" "$var2" "$var3"

これで、それらの1つがnullになることを許可し、touchその場合nullパラメータとして渡さないようにする(そして問題を解決するためにset -u)、次のように書くことができます。

touch -- ${var1:+"$var1"} ${var2:+"$var2"} ${var3:+"$var3"}

別のオプションは、次のことです。

(IFS=; set -f +u; touch -- $var1 $var2 $var3)

使用してIFS=無効にします。噴射、ワイルドカードを使用しますset -fが、変数を引用解除する3番目の副作用に依存します。空の除去。 (また、サブシェルでのみこのnounsetすべての機能を無効にしました。)set +u

答え2

1行だけできるかどうか疑問です。次のように試してみることもできます。

validate_touch()
{
for value in "$@"
do
if [ ! -z "$value" ]; then touch $value;fi
done
}
validate_touch new

関連情報