Bash의 실행 라인 내 로드 조건

Bash의 실행 라인 내 로드 조건

변수의 속성에 따라 달라지는 옵션을 사용하여 명령을 실행하고 싶습니다. 변수가 설정된 경우 해당 값으로 옵션을 로드하고, 그렇지 않은 경우 해당 옵션을 로드하지 마세요. 이것이 내가 가진 것입니다:

if [ -n "$variable" ]
  then command ... -option $variable
  else command ...
fi

아이디어는 명령의 다른 옵션을 두 번 반복할 필요가 없도록 이것을 조건이 포함된 단일 명령으로 병합하는 것입니다.

시간 내 주셔서 대단히 감사합니다.

답변1

Bash 배열 사용:

opts=()
[ "$variable" ] && opts+=(-option "$variable")
command ... "${opts[@]}"

$variable이것은 bash 배열을 사용하기 때문에 공백이나 기타 어려운 문자가 포함되어 있어도 작동합니다 .

작동 원리

  • opts=()

    그러면 이라는 빈 배열이 생성됩니다 opts.

  • [ "$variable" ] && opts+=(-option "$variable")

    비어 있지 않으면 배열에 및 를 $variable추가합니다 .-option$variableopts

  • command ... "${opts[@]}"

    그러면 명령이 실행됩니다. 비어 있지 않으면 opts해당 요소가 명령에 추가됩니다. 비어 있으면 아무것도 추가되지 않습니다. 마치 거기에 전혀 없는 opts것처럼 보입니다 ."${opts[@]}"

답변2

그런 다음 명령을 받아 다음과 같은 기능으로 만드세요.

function command_function () {
  command ... -option $variable
}

if [ -n "$variable" ]
  then command_function ... -option $variable
  else command_function ...
fi

Bash 함수의 괄호는 아무것도 전달하지 않는다는 것을 알 수 있습니다.

답변3

사용세게 때리다대체(쉘 매개변수 확장) 간결하면서도 읽기 쉬운 구문은 다음과 같습니다.

$ echo ${variable:+-option $variable}

$ variable=yes
$ echo ${variable:+-option $variable}
-option yes

답변4

다음과 같은 한 줄짜리 작업이 수행됩니다.

[ x"$VARIABLE" = x ] && echo UNSET || echo SET

이는 변수가x"$변수"같음엑스, 다시 말해서 만약$변수비었다; 테스트가 첫 번째 옵션을 만족하는 경우(에코 UNSET)가 실행되면 테스트가 수행됩니다.~ 아니다만족하면 마지막 옵션이 실행됩니다(에코 설정). 두 번째 경우에는 아무것도 하고 싶지 않다면 할 수 있습니다.

[ x"$VARIABLE" = x ] && echo UNSET || :

이는 다른 솔루션보다 훨씬 간단하고 조건을 한 번만 평가할 수 있으며 VARIABLE에 나타나는 이상한 문자에 대해 강력합니다.

관련 정보