다음을 통해 여러 플래그를 사용하여 bash 스크립트를 호출합니다.
/home/username/myscript -a -b 76
이를 설명하기 위해 -a 플래그는 myscript에서 작업을 수행하고 -b 플래그는 myscript에서 일부 매개변수를 76으로 설정합니다.
이전에 정의된 변수를 기반으로 이러한 플래그를 조건부로 만들려면 어떻게 해야 합니까? 예를 들어, 특정 변수가 var=ON인 경우에만 -a 플래그를 사용하고 싶고, 그렇지 않으면 플래그를 사용하는 방법을 모릅니다. 나는 비슷한 것을 찾고 있습니다 :
var=ON
/home/username/myscript
if [ "$var" == "ON" ]; then
-a
fi
-b 76
그러나 이 계획은 시행 이후 실행되지 않았다. 원하는 결과를 얻으려면 무엇을 사용할 수 있습니까?
답변1
배열로 명령을 작성할 수 있습니다.
#!/bin/bash
var=ON
cmd=( /home/username/myscript ) # create array with one element
if [ "$var" == "ON" ]; then
cmd+=( -a ) # append to the array
fi
cmd+=( -b 76 ) # append two elements
그런 다음 실행하십시오.
"${cmd[@]}"
마지막 부분의 따옴표와 위 과제 주변의 괄호를 참고하세요. 구문은 보기 흉하지만 공백 등이 포함된 인수에 직면하면 작동합니다. (공백이 포함된 매개변수를 추가하려면 따옴표를 사용하세요. 예: cmd+=("foo bar")
)
관련된, 덜 추악한 방법과 실패할 수 있는 방식:
여기처럼 선택적 매개변수가 있는 간단한 경우에는 대체 값으로 확장할 수 있습니다.
var=x
myscript ${var:+"-a"} -b 76
여기에 ${var:+foo}
비어 있지 않으면 삽입하고(즉, 가 삽입됩니다) 비어 있거나 설정되지 않은 경우(, 또는) 아무것도 삽입하지 않습니다. 일반적인 인용 문제에 유의하시기 바랍니다.foo
var
var=ON
var=FALSE
var=x
var=
unset var
답변2
내가 올바르게 이해했다면:
var=ON
if [ "$var" = "ON" ]; then
/home/username/myscript -a -b 76
else
/home/username/myscript -b 76
fi