如何让“$@”在命令中间插入参数?

如何让“$@”在命令中间插入参数?

我试图在命令中间插入一个参数以"$@"用于学习目的。我不知道这是否是最佳的,但这就是我一直在努力做的。这就是我所拥有的:当我运行时,test.sh foo它会运行echo "$@" bar我希望打印的内容foo bar。相反,它正在打印bar foo。我不知道这是否是预期的行为,也不知道我应该做什么。

test.sh foo
# runs
echo "$@" bar
# which is printing
bar foo

编辑:我简化了上下文,实际上正在尝试使用"$@" 在别名中。

答案1

别名只是一个简单的替换,它们本身不接受参数。所以如果你有alias x='echo "$@" bar'(*),并且你运行x foo,你最终会得到

echo "$@" bar foo

即仅将别名x替换为内容,其余部分保留在最后。现在,这是运行"$@"上下文的参数列表x foo。可能是您的交互式 shell,它的参数列表中通常没有任何内容,因此"$@"被删除。但是,如果参数列表中有某些内容(位置参数),它们会在该位置展开:

$ alias x='echo "$@" bar'
$ set -- args here
$ x foo
args here bar foo

相反,如果您使用函数或脚本文件,那就可以了。这应该打印foo bar

f() {
    echo "$@" bar
}
f foo

as 应该运行类似./s.sh foo, ifs.sh是可执行的并且包含该echo行。

看:

(*test是一个标准命令,与 相同[ .. ],所以最好不要将它用于......好吧,这种测试目的。)

相关内容