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
[[
bash
case
bash
より一般的には、このようなことを避けるのが最善です。cmd1 && cmd2 || cmd3
なぜなら、失敗すると通常は望むように動作しないからですcmd2
。
また、すべてを1行に入れることは意味がありません。それはいくつかの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'