命令在 bash_profile 与终端中的作用不同

JRL*_*ert 2 osx shell terminal

git branch -r | awk '{print $1}' 输入终端产生:

origin/HEAD
origin/master
Run Code Online (Sandbox Code Playgroud)

alias test1="git branch -r | awk '{print $1}'".bash_profile产量方面:

  origin/HEAD -> origin/master
  origin/master
Run Code Online (Sandbox Code Playgroud)

为什么awk '{print $1}'.bash_profile?

Kus*_*nda 5

定义别名:

$ alias test1="git branch -r | awk '{print $1}'"
Run Code Online (Sandbox Code Playgroud)

然后看它的定义:

$ alias test1
alias test1='git branch -r | awk '\''{print }'\'''
Run Code Online (Sandbox Code Playgroud)

怎么$1不见了?那是因为您的别名定义在双引号中。这意味着 shell 扩展了$1定义别名的字符串中的变量。它的值为空。

在别名定义周围使用单引号,转义$,或编写适当的函数:

test1 () {
    git branch -r | awk '{ print $1 }'
}
Run Code Online (Sandbox Code Playgroud)

一个好的经验法则可能是这样的:如果您的别名比单个命令更复杂(并且需要特殊引用等),那么将其编写为 shell 函数。