2012-06-12 47 views
0

在嘗試調試作業提交腳本,我結束了該bug縮小到這一點:Bash陣列功能或錯誤?

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

這是一個新的bash會話的完整無缺的成績單。任何人都有任何想法如何工作?這是我之前從未聽說過的bash的一些古老特徵,還是僅僅是一個非常奇怪的錯誤?

版本(是的,我知道這是過時):

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

當陣列形成時球體仍然是球形的。如果你不想要這個,那麼你需要引用或逃避它們。

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

您可以禁用文件名以set -f和通配符重新啓用它!!!!我爲什麼沒有想到這一點;我知道它必須依賴於文件夾,但不知怎的,它錯過了。 Thankyou多。我不認爲我可以引用'var =($ l)',所以我想我只是使用'cut'。 – zebediah49

+0

@ zebediah49當然你可以引用'var =(「$ l」)'......除非你真正想要的是字符串拆分而不是glob-expand'$ l'?這也是可能的,但在告訴你如何去做之前,你需要告訴我們你想要什麼。 –

+0

我隱約觸摸它,但我想分割字符串,沒有任何其他事情發生。具體來說,我需要'$ {var [0]}','$ {var [1]}和$ {var [@]:2}'。 'awk'會做到這一點,只是有些笨拙。 – zebediah49

1

ls /data/testuser/jobs/example/a16162/foo1*是什麼顯示?與set +f