命令参数中解释别名的问题

命令参数中解释别名的问题

我有以下别名:

alias mv='mv -i'
alias git='LANG=en_US \git '

然后当我执行git mv命令时,它mv会被解释为mv -i

$ git mv a b
error: unknown switch `i'

我希望仅当它是 bash 命令时才应用别名

版本:

  • Ubuntu 16.04.3 LTS
  • GNU bash,版本 4.3.48(1)
  • git 版本 2.7.4 (我也不认为它与 git 链接)

笔记:

  • git \mv a b作品
  • 取消混叠 git 也可以\git mv a b

答案1

因为git是别名以空格结尾,bash 对紧随其后的单词执行别名扩展:

$ alias mv='mv -i'
$ alias git=': git '
$ set -x
$ git mv
+ : git mv -i

文档

如果别名值的最后一个字符为空白,则还会检查别名后面的下一个命令字是否有别名扩展。

创建git一个不带空格的别名:

alias git='LANG=en_US git'

注意:

替换文本的第一个单词会进行别名测试,但与正在扩展的别名相同的单词不会再次扩展。例如,这意味着可以别名lsls -F,并且 Bash 不会尝试递归地扩展替换文本。

所以,你不需要\git那里。

相关内容