#!/bin/sh
echo "Noise $1"
echo "Enhancement $2"
for snr in 0 5 10 15 20 25
do
python evaluate.py --noise $1 --snr 25 --iterations 1250 --enhancement $2
done
指定しない場合は、Pythonスクリプトに$2
引数を渡したくありません。--enhancement $2
どうすればいいですか?
ベストアンサー1
元のスクリプトを変更します。
#!/bin/sh
echo "Noise $1"
echo "Enhancement $2"
for snr in 0 5 10 15 20 25
do
python evaluate.py --noise "$1" --snr "$snr" --iterations 1250 ${2:+--enhancement "$2"}
done
標準パラメータ拡張 ${var:+word}
word
変数がvar
設定されていて空でない場合は展開されます。上記のコードは、使用可能で空でない--enhancement "$2"
場合にそれをコマンドに追加するために使用します。$2
--snr
また、オプション引数として提供することがループ変数の値でなければならないとします。
コードに対する私の個人的な意見(主に代わりprintf
に使用しecho
、長い行を避け、コードに詳細を提供します):
#!/bin/sh
printf 'Noise %s\n' "$1"
printf 'Enhancement %s\n' "$2"
for snr in 0 5 10 15 20 25; do
python evaluate.py \
--noise "$1" \
--snr "$snr" \
--iterations 1250 \
${2:+--enhancement "$2"}
done
mosvyが以下の説明で指摘したように:/bin/sh
シェルの場合、または新しいシェルセッションの開始時に他のシェルが正しくリセットされない場合dash
(POSIXで必要)、何らかの理由でエクスポートしてIFS
提供IFS
してください。デフォルト以外の値の場合は、上記のスクリプトのunset IFS
一番上で使用できます。
修正するたびにこれを行うIFS
輸出によって疑われる余地なく提起されるその他の問題(エクスポートしないでくださいIFS
)。