为什么这个只打印arg
一次?
$ alias test="echo $1 $1 $1"
$ test arg
arg
这是在 GNU bash 版本 4.2.25(1)-release (x86_64-pc-linux-gnu) 上。
答案1
alias
定义别名后,用命令列出别名,您将清楚地理解它:
alias test="echo $1 $1 $1"
alias
输出:
alias test='echo '
它只是扩展为一个字符串,其中仅包含在执行时定义的变量。例如,这可以工作(定义了 Vvariable MY_VAR):
MY_VAR="foo"
alias test="echo $MY_VAR $MY_VAR $MY_VAR"
alias
输出:
alias test='echo foo foo foo'
你可以用函数替换它
function test() {
echo $1 $1 $1
}
答案2
我怀疑是否alias
支持 $1,$2,...它的帮助对此保持沉默。
所以我认为你的命令test arg
被扩展为echo $1 $1 $1 arg
.如果 $1 为空,您将得到结果。
再举1个例子:
$ alias test='echo $1 $1 $1'
$ test arg1 arg2
arg1 arg2
在上面的示例中,执行了 alias test=...
get ,最终效果是我们获得了 command 的别名echo
。我们运行命令就可以看到这个效果test arg1 arg2
。我们所做的就是运行echo
并向其传递字符串arg1
和arg2
.
$ echo arg1 arg2