私の問題を説明できません。ご了承ください。コマンドを呼び出すスクリプトがあります。入力ファイルの選択に応じて、コマンドラインに追加のパラメータを含める必要があります。私はこれを試しました:
case "$model" in
CNRM-CM6-1|CNRM-ESM2-1)
trim_op="-selindexbox,2,361,2,293"
;;
EC-Earth3)
trim_op="-selindexbox,2,361,2,291"
;;
IPSL-CM6A-LR)
trim_op="-selindexbox,2,361,2,331"
;;
MPI-ESM1-2-HR)
trim_op="-selindexbox,2,801,3,403"
;;
MPI-ESM1-2-LR)
trim_op="-selindexbox,2,255,2,219"
;;
NorESM2-LM)
trim_op="-selindexbox,2,359,2,383"
;;
*)
trim_op=""
;;
esac
cdo -O remapcon,"$target_grid" "$trim_op" "$input_file" "$output_file"
しかし、バッシュはその空の言葉に喉が詰まった。 Bashでこれを行う正しい方法は何ですか?私がしたことは次のとおりです。
if [[ -z $trim_op ]] ; then
cdo -O remapcon,"$target_grid" "$input_file" "$output_file"
else
cdo -O remapcon,"$target_grid" "$trim_op" "$input_file" "$output_file"
fi
今はとても無知だと思います。これは名前がありますか?私が検索するたびに表示されます頂上に登るこれは私が探しているものではありません。
答え1
変数が空のとき"$trim_op"
に呼び出しからパラメータを削除するには、次のようにします。cdo
cdo -O remapcon,"$target_grid" ${trim_op:+"$trim_op"} "$input_file" "$output_file"
変数拡張${trim_op:+"$trim_op"}
次に展開 "$trim_op"
(その後、さらに拡張されます)trim_op
変数が設定され、変数の値が空でない場合。
答え2
"$trim_op"
変数の値が何であれ、単一の引数に展開されます。したがって、trim_op
空の文字列に設定すると空のパラメータが得られ、ほとんどのプログラムでは機能しない可能性があります。
"$@"
"${array[@]}"
これは、可変数の引数を使用できる拡張とは異なります。したがって、配列をサポートするBash、ksh、またはzshなどのシェルでは、次のいずれかを使用して引数を格納します。
たとえば、Bashを使用している場合
unset args
case "$model" in
CNRM-CM6-1|CNRM-ESM2-1)
args+=("-selindexbox,2,361,2,293") ;;
EC-Earth3)
args+=("-selindexbox,2,361,2,291") ;;
# *)
# nothing here ;;
esac
args+=("$input_file" "$output_file")
cdo -O remapcon,"$target_grid" "${args[@]}"
多くの場合、人々は変数から2つの引数を取得しようとすると反対方向にこの問題に遭遇しますが、空白またはワイルドカードがある場合は問題が発生します。
また、見ることができます
- 条件付きで引数をスクリプトに渡す
- 参照された変数がnullの場合、どのようにnullに拡張できますか?そして
- 変数に保存されたコマンドをどのように実行できますか?コマンドとコマンドのパラメータを変数に保存する方法に関するその他の質問
答え3
通常、スペースがないため、trim_op
次のことができます。
cdo -O remapcon,"$target_grid" $trim_op "$input_file" "$output_file"
つまり、$trim_op
参照されません。
空の場合は、trim_op
次のように実行する必要があります。cdo -O remapcon,"$target_grid" "$input_file" "$output_file"
答え4
$ cdo -O remapcon,"$target_grid" ${trim_op} "$input_file" "$output_file"
たとえば、最近誰かが引用符なしのbash変数の拡張子が私が望むものだと指摘しました。あや!