具有args的bash别名在一种环境中有效,而在另一种环境中无效

时间:2019-03-13 11:31:05

标签: linux bash shell alias

我看过很多帖子,指出shell别名不支持args。在一个环境中,CentOS 6.10,Bash 4.1.2,我有这个:

alias hist='source ~/scripts/hist "@$"'

(〜/ scripts / hist是一个shell脚本) 这可行。该脚本准确地从别名接收传递的参数。在另一个环境中-RHEL Server 7.5,Bash 4.2.46具有相似的别名-唯一的区别是别名中的显式路径:

alias hist='source /full/path/to/hist "@$"'

不起作用。当脚本运行时,它认为它已收到如下参数:“ uid = nnnn(用户名)gid = nnnn(grpname)groups = nnnn(grp)”

两个地方的脚本完全相同。我只是想知道可能会有什么解释。

1 个答案:

答案 0 :(得分:2)

它没有按预期运行,这是一个最小的示例

alias print_args='printf "<%s>\n" "$@"'

print_args "hello" "world"

可以打印

<hello>
<world>

但仅当未设置当前shell参数时(有时在交互式shell中为true,但并非总是如此)

例如在set 1 2 3之后

set -- 1 2 3
print_args "hello" "world"

打印

<1>
<2>
<3>
<hello>
<world>

命令行位置参数在当前位置参数旁边。

以下(没有"$@")正确传递了命令行参数

alias print_args='printf "<%s>\n"'
print_args "hello" "world"
相关问题