!["변수 a에 'abc' 패턴이 있으면 x를 수행하고 그렇지 않으면 y를 수행합니다"(1행)를 수행하는 방법](https://linux55.com/image/38018/%22%EB%B3%80%EC%88%98%20a%EC%97%90%20'abc'%20%ED%8C%A8%ED%84%B4%EC%9D%B4%20%EC%9E%88%EC%9C%BC%EB%A9%B4%20x%EB%A5%BC%20%EC%88%98%ED%96%89%ED%95%98%EA%B3%A0%20%EA%B7%B8%EB%A0%87%EC%A7%80%20%EC%95%8A%EC%9C%BC%EB%A9%B4%20y%EB%A5%BC%20%EC%88%98%ED%96%89%ED%95%A9%EB%8B%88%EB%8B%A4%22(1%ED%96%89)%EB%A5%BC%20%EC%88%98%ED%96%89%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
한 줄에 환경 변수 패턴 일치를 기반으로 별칭을 설정하고 싶습니다.
노력하고있어:
[[$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
[[
bash
case
bash
더 일반적으로는 이와 같은 것을 피하는 것이 가장 좋습니다. 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'