次のロジックを使用するスクリプトがあります。
if [ ! -z "$1" ]; then # if any parameter is supplied
ACTION= # clear $ACTION
else
ACTION=echo # otherwise, set it to 'echo'
fi
これはそのままで問題なく動作します。ただし、マニュアルの「シェルパラメータ拡張」セクションを読むと、bash
これは1つのステップで実行できるはずです。しかし、そのやり方に頭を悩ませることはできません。
私はもう試した:
ACTION=${1:-echo} # ends up with $1 in $ACTION
ACTION=${1:+}
ACTION=${ACTION:-echo} # ends up always 'echo'
そしてそれらをネストするいくつかの方法がありますが、私が知る限り、ネストは許可されていないようです。
私はすでに実用的な解決策を持っていることを認識していますが、これが可能かどうか本当に興味があります。三項演算子を使えば簡単なことですが、bashにあるとは思いません。
これが可能であれば、if / else構文を使用せずに、シェルパラメーター拡張機能の任意の組み合わせのみを使用して、このように見える2ステップのプロセスを実行するロジックを確認したいと思います。
ありがとうございました。
elderarthisの編集:
スクリプトの残りの部分は次のとおりです。
find . -name "*\?[NMSD]=[AD]" -exec ${ACTION} rm -f "{}" +
私は自分自身に対する健全性チェックをしたいACTION=echo
ので、引数を渡すと実際に削除が行われます($ {ACTION}を無効にすることで)。引数を渡さないとエコーが残ります。
そして私はTIMTOWTDIを知っています。シェルパラメータ拡張セクションの内容だけで実行できるかどうかを確認しています:-)
ミケルのための編集:
$ cat honk.sh
#!/bin/bash
ACTION=${1-echo}
echo $ACTION
$ ./honk.sh
echo
$ ./honk.sh foo
foo
最後はを持っている必要がACTION=''
あるため、空白行/null値を返します。