"변수 a에 'abc' 패턴이 있으면 x를 수행하고 그렇지 않으면 y를 수행합니다"(1행)를 수행하는 방법

"변수 a에 'abc' 패턴이 있으면 x를 수행하고 그렇지 않으면 y를 수행합니다"(1행)를 수행하는 방법

한 줄에 환경 변수 패턴 일치를 기반으로 별칭을 설정하고 싶습니다.

노력하고있어:

[[$HOSTNAME =~ 'q20' ]] && alias a='cd ~/a1' || alias a='cd ~/a99'

하지만 난 이해해-bash: [[uscamwebq20.boston.zipcar.com: command not found

나는 또한 다음을 시도했습니다.

$ [ -z $HOSTNAME =~ q20 ] && alias a='cd ~/a1' || alias a1='cd ~/a99'

하지만 난 이해해-bash: [: too many arguments

답변1

case $HOSTNAME in (*q20*) alias a='cd ~/a1';; (*) alias a='cd ~/a99'; esac

뒤에 공백이 누락되어 있고 특정 문자열이 비어 있는지 테스트하기 [[때문에 오류가 발생합니다. 비표준 기능이며 작동 방식은 POSIX 이며 모든 POSIX 셸 및 모든 버전에서 작동하도록 작성되었습니다 .-z[[bashcasebash

더 일반적으로는 이와 같은 것을 피하는 것이 가장 좋습니다. cmd1 && cmd2 || cmd3왜냐하면 실패하면 일반적으로 원하는 대로 작동하지 않기 때문입니다 cmd2.

또한 모든 것을 한 줄에 넣는 것이 의미가 없습니다. 그것은 일부 rc 파일에 들어가는 것입니다. 그렇죠? 여러 줄이면 더 명확해질 것입니다.

case $HOSTNAME in
  (*q20*) alias a='cd ~/a1';;
      (*) alias a='cd ~/a99'
esac

다음보다 더 명확하고 이식성이 뛰어납니다.

if [[ $HOSTNAME =~ q20 ]]; then
  alias a='cd ~/a1'
else
  alias a='cd ~/a99'
fi

다음보다 그 자체가 더 명확하고 정확합니다.

[[ $HOSTNAME =~ q20 ]] &&
  alias a='cd ~/a1' ||
  alias a='cd ~/a99'

그 자체보다

[[ $HOSTNAME =~ q20 ]] && alias a='cd ~/a1' || alias a='cd ~/a99'

답변2

첫 번째 양식을 사용할 수 있지만 그 뒤에 공백을 추가해야 합니다 [[. 바라보다:

$ type [[
[[ is a shell keyword

$ help [[
[[ ... ]]: [[ expression ]]
    Execute conditional command.

따라서 명령은 다음과 같아야 합니다.

[[ $HOSTNAME =~ 'q20' ]] && alias a='cd ~/a1' || alias a='cd ~/a99'

관련 정보