Bash의 실행 라인 내에서로드 조건


1

변수의 속성에 따른 옵션으로 명령을 실행하고 싶습니다. 변수가 설정되어 있으면 값과 함께 옵션을로드하되 그렇지 않은 경우 해당 옵션을로드하지 마십시오. 이것이 내가 가진 것입니다 :

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

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

시간 내 주셔서 정말 감사합니다.


나는 당신이 받아 들인 것보다 간단한 해결책을 가지고 있습니다. pls는 그것을 보았습니다. 건배.
MariusMatutiae

답변:


1

bash 배열 사용하기 :

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

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

작동 원리

  • opts=()

    이것은이라는 빈 배열을 만듭니다 opts.

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

    경우 $variable비어 있지 않은, 우리는 추가 -option$variable배열에 opts.

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

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


감사! 그것은 매력처럼 작동했습니다. 호기심을 위해 "@"는 무엇을 의미합니까?
Juan Juan

@ Juan Glad 그것은 당신을 위해 일했습니다. @에서는 ${opts[@]}의 각 요소를 확장 bash는 말한다 opts별도의 단어를.
John1024

0

그런 다음 명령을 수행하여 다음과 같은 기능을 수행하십시오.

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

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

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


0

사용 배쉬 대체 ( 쉘 변수-확장을 간결한 여전히 읽을 수있는 구문) :

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

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

0

다음의 한 줄짜리가 할 것입니다 :

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

변수 x "$ VARIABLE"x 와 같은지 , 즉 $ VARIABLE 이 비어 있는지 테스트합니다 . 테스트가 만족되면 첫 번째 옵션 ( echo UNSET )이 실행되고, 테스트가 만족 되지 않으면 마지막 옵션 ( echo SET ) 이 실행 됩니다. 두 번째 경우에 아무것도하지 않으려면 할 수 있습니다

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.