この例を適用しようとするとこの回答
mycmd=(ls) # initial command
if [ "$want_detail" = 1 ]; then
mycmd+=(-l) # optional flag
fi
mycmd+=("$targetdir") # the filename
"${mycmd[@]}"
私はそれを知っています
mycmd=(python3 /tmp/test.py)
A="a value"
B="b value"
ARGS="-a ${A} -b ${B}"
mycmd+=("$ARGS")
"${mycmd[@]}"
元の例のように各フラグを個別に追加しない理由mycmd+=(-l)
は、フラグが9つなので、各フラグとその値を別々の行(18行の追加行)に追加したくないからです。
問題は、test.py
パラメータを単一の文字列として受け取ることです。また、パラメータ値にスペースが含まれる可能性があるため、他の問題に直面する可能性があると思います(この問題を解決できますかARGS="-a \"${A}\" -b \"${B}\""
?)。
$ bash -x /tmp/test.sh
+ mycmd=(python3 /tmp/test.py)
+ A='a value'
+ B='b value'
+ ARGS='-a a value -b b value'
+ mycmd+=("$ARGS")
+ python3 /tmp/test.py '-a a value -b b value'
usage: test.py [-h] -a A -b B
test.py: error: the following arguments are required: -b
答え1
各フラグを個別に追加することはありません...
それが問題だ。別々のパラメータを1つに圧縮すると、ここで配列の使用の全体的なポイントを無効にできます。
各フラグとその値を別々の行に追加したくありません...
次に、次のようにします。
mycmd+=(-a "$A")
# or
mycmd+=(-a "$A" -b "$B")