我想根据 1 行中的环境变量模式匹配来设置别名。
我在尝试:
[[$HOSTNAME =~ 'q20' ]] && alias a='cd ~/a1' || alias a='cd ~/a99'
Run Code Online (Sandbox Code Playgroud)
但我明白了 -bash: [[uscamwebq20.boston.zipcar.com: command not found
我也试过:
$ [ -z $HOSTNAME =~ q20 ] && alias a='cd ~/a1' || alias a1='cd ~/a99'
Run Code Online (Sandbox Code Playgroud)
但我明白了 -bash: [: too many arguments
case $HOSTNAME in (*q20*) alias a='cd ~/a1';; (*) alias a='cd ~/a99'; esac
Run Code Online (Sandbox Code Playgroud)
您收到错误,因为后面缺少空格[[
,因为-z
要测试特定字符串是否为空。[[
是一个非标准功能,它的行为取决于bash
. 该case
结构是 POSIX,并且可以在任何 POSIX shell 和任何版本的bash
.
更一般地说,最好远离类似的事情,cmd1 && cmd2 || cmd3
因为如果cmd2
失败,它通常不会做你想做的事。
另外,我不认为将所有内容放在一条线上。这是将要转到某些 rc 文件的内容,对吗?如果在几行上,它会更清晰。
case $HOSTNAME in
(*q20*) alias a='cd ~/a1';;
(*) alias a='cd ~/a99'
esac
Run Code Online (Sandbox Code Playgroud)
比以下内容更易读和便携:
if [[ $HOSTNAME =~ q20 ]]; then
alias a='cd ~/a1'
else
alias a='cd ~/a99'
fi
Run Code Online (Sandbox Code Playgroud)
本身比以下内容更清晰(也更正确):
[[ $HOSTNAME =~ q20 ]] &&
alias a='cd ~/a1' ||
alias a='cd ~/a99'
Run Code Online (Sandbox Code Playgroud)
本身比
[[ $HOSTNAME =~ q20 ]] && alias a='cd ~/a1' || alias a='cd ~/a99'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
131 次 |
最近记录: |