「変数aに「abc」パターンがある場合はxを実行し、それ以外の場合はyを実行します」(行1)を実行する方法

「変数aに「abc」パターンがある場合はxを実行し、それ以外の場合はyを実行します」(行1)を実行する方法

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[[bashcasebash

より一般的には、このようなことを避けるのが最善です。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'

おすすめ記事