2016-03-15 69 views
1

我希望能夠在這樣一行定義變量行:之一,在bash的幾個變量

variable=text1|text2|text3 

,而不是

variable1=text1 
variable2=text2 
variable3=text3 

我怎麼會輕易做到這一點之後,還可以能夠以簡單的方式分別打電話給他們?優選通過用$變量[1] text2的調用它們。

值不會真的要通過管道分離,即只是舉例。

我」,M不是一個真正的編碼器,我只是涉足我的基於Ubuntu HTPC一些腳本,所以請溫柔;)

編輯:謝謝您DevSolar領導我在正確的軌道上。我想一個數組,但與另一個分隔符不是空間,現在我解決了它這樣的:

variable="text1;text2;text3" 

IFS=';' read -r -a array <<< "$variable" 

echo "${array[0]}" 
echo "${array[1]}" 
echo "${array[2]}" 

剛剛意識到的管道可能沒有最好的分隔符,所以我用分號來代替去。

回答

4

也許你要尋找的是一個array

array=(text1 text2 text3) 
echo ${array[0]} 

會給text1

+1

謝謝你帶領我在正確的軌道上。查看我更新的關於我的解決方案 – SwedishGojira

0

儘管陣列可能是首選的方式,在一次

$ read var1 var2 var3 <<< "val1 val2 val3"; echo $var1 
val1 
+0

雖然'read'有很好的用途,這是不是其中之一。 'VAR1 =「VAL1」 VAR2 =「值2」 VAR3 =「VAL3」'(全部在一行,是)是合法的,更短,更易於閱讀(不受IFS'的'當前值)。 – chepner

0

分配多個值,如果你已經有了喜歡

data="text 1|text 2|text3" 

一個字符串,然後使用read來填充數組是有用的替代:

$ IFS="|" read -ra var <<< "$data" 
$ echo "${var[0]}" 
text 1 
$ echo "${var[1]}" 
text 2 
$ echo "${var[2]}" 
text3 

否則,直接數組賦值是poss IBLE:

var=("text 1" "text 2" text3)