Bash数组特性还是Bug?
在尝试调试作业提交脚本时,我最终将错误范围缩小为:Bash数组特性还是Bug?,bash,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
[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
版本(是的,我知道它过时了):
编辑:这是为了处理用户传递的数组,我宁愿使用这种方法,也不愿使用三组相当笨拙的
awk
hack。它们是“提取元素2”之类的东西,这就是为什么使用数组看起来更好的原因。当数组形成时,全局仍然是全局的。如果你不想这样,那么你需要引用或逃避它们
$ var=( 1 "foo1*bar4" echo "1*4=4" )
当阵列形成时,全局仍然是全局的。如果你不想这样,那么你需要引用或逃避它们
$ var=( 1 "foo1*bar4" echo "1*4=4" )
ls/data/testuser/jobs/example/a16162/foo1*
揭示了什么
您可以使用
set-f
禁用文件名全局搜索,并使用set+f
重新启用文件名全局搜索ls/data/testuser/jobs/example/a16162/foo1*
显示了什么
您可以使用
set-f
禁用文件名全局绑定,并使用set+f
重新启用它!!!!为什么我没有想到这一点;我知道它必须依赖于文件夹,但不知怎么的,我忽略了这一点。多谢各位。我想我不能引用var=($l)
,所以我想我会用cut
@zebediah49当然你可以引用var=(“$l”)
。。。除非您真正想要的是字符串拆分而不是全局展开$l
?这也是可能的,但是你需要先告诉我们你想要什么,然后我们才能告诉你怎么做。我模糊地触摸了它,但我想在没有其他任何事情发生的情况下分开绳子。具体来说,我需要${var[0]}
,${var[1]}
和${var[@]:2}
<代码>awk会这样做,只是有点笨拙。!!!!为什么我没有想到这一点;我知道它必须依赖于文件夹,但不知怎么的,我忽略了这一点。多谢各位。我想我不能引用var=($l)
,所以我想我会用cut
@zebediah49当然你可以引用var=(“$l”)
。。。除非您真正想要的是字符串拆分而不是全局展开$l
?这也是可能的,但是你需要先告诉我们你想要什么,然后我们才能告诉你怎么做。我模糊地触摸了它,但我想在没有其他任何事情发生的情况下分开绳子。具体来说,我需要${var[0]}
,${var[1]}
和${var[@]:2}
awk
会这样做,只是有点笨拙。