我试图在命令中间插入一个参数以"$@"
用于学习目的。我不知道这是否是最佳的,但这就是我一直在努力做的。这就是我所拥有的:当我运行时,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
是一个标准命令,与 相同[ .. ]
,所以最好不要将它用于......好吧,这种测试目的。)