.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'