이 예를 적용하려고 할 때이 답변
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
각 플래그를 개별적으로 추가하지는 않을 것입니다 ...
그것이 문제이다. 별도의 매개변수를 하나로 압축하면 여기서 배열 사용의 전체 요점을 무효화할 수 있습니다.
각 플래그와 해당 값을 별도의 줄에 추가하지 않으려고 합니다...
그런 다음 다음과 같이 하십시오:
mycmd+=(-a "$A")
# or
mycmd+=(-a "$A" -b "$B")