web-dev-qa-db-ja.com

bash_profileとターミナルで異なる動作をするコマンド

git branch -r | awk '{print $1}'を端末に入力すると、次のようになります。

Origin/HEAD
Origin/master

一方、alias test1="git branch -r | awk '{print $1}'".bash_profileは次のようになります。

  Origin/HEAD -> Origin/master
  Origin/master

awk '{print $1}'.bash_profileが無視されるのはなぜですか?

2
JRLambert

エイリアスを定義します。

$ alias test1="git branch -r | awk '{print $1}'"

次に、その定義を見てください。

$ alias test1
alias test1='git branch -r | awk '\''{print }'\'''

$1がどのように消えたかをご覧ください。これは、エイリアス定義が二重引用符で囲まれているためです。これは、シェルがエイリアスを定義した文字列の$1変数を展開したことを意味します。その値は空でした。

エイリアス定義を一重引用符で囲むか、$をエスケープするか、適切な関数を記述してください。

test1 () {
    git branch -r | awk '{ print $1 }'
}

経験則としては、次のようになります。エイリアスが単一のコマンドよりも複雑な場合(および特別な引用符などが必要な場合)、代わりにシェル関数として記述します。

5
Kusalananda