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
このエラーメッセージが表示されます。ksh
ksh -u
ksh -o nounset
set -u
set -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