Bash阵列功能还是Bug?

时间:2012-06-12 23:13:30

标签: bash

在尝试调试作业提交脚本时,我最终将错误缩小到这个:

    [testuser@bes ~]$ var=( 1 foo1*bar4 echo 1*4=4 )
    [testuser@bes ~]$ echo "${var[@]}"
    1 foo1*bar4 echo 1*4=4
    [testuser@bes ~]$ cd /data/testuser/jobs/example/a16162/
    [testuser@bes a16162]$ var=( 1 foo1*bar4 echo 1*4=4 )
    [testuser@bes a16162]$ echo "${var[@]}"
    1 foo1-bar4 foo1*bar4 echo 1*4=4
    [testuser@bes a16162]$

这是一个新的bash会话的未切割成绩单。任何人都知道那个有用吗?这是我之前从未听说过的bash的一些古老特征,还是一个非常怪异的bug?

版本(是的,我知道它已经过时了):

GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.

Linux bes 2.6.18-194.11.3.el5 #1 SMP Mon Aug 30 16:19:16 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux

编辑:这是针对需要处理用户传递的数组的东西,我宁愿使用这种方法,而不是使用相当笨拙的awk黑客。他们琐碎地提取元素2"各种各样的东西,这就是为什么使用数组似乎更好。

2 个答案:

答案 0 :(得分:2)

当阵列形成时,Globs仍然是全局的。如果你不想要这个,那么你需要引用或逃避它们。

$ var=( 1 "foo1*bar4" echo "1*4=4" )

答案 1 :(得分:1)

ls /data/testuser/jobs/example/a16162/foo1*揭示了什么?

您可以使用set -f禁用文件名通配,并使用set +f

重新启用它