한 줄에 환경 변수 패턴 일치를 기반으로 별칭을 설정하고 싶습니다.
노력하고있어:
[[$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'