别名中的参数使用一次后会发生什么?

别名中的参数使用一次后会发生什么?

为什么这个只打印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并向其传递字符串arg1arg2.

$ echo arg1 arg2

相关内容