題 動態構建shell變量


我需要動態創建一個變量名,如下所示(簡化示例):

#!/bin/sh

IDX=1
SERIES1="a b c d e f g"
SERIES2="h i j k l m n"

# How to get this value contains $SERIES1 or $SERIES2
# depending on the value of $IDX
CURRENT=${SERIES\${IDX}} # doesn't work, just an example

如果 IDX=1 我希望有

echo $CURRENT

顯示

a b c d e f g

而如果 IDX=2 顯示

h i j k l m n

我需要在一個循環中使用它來獲取來自另一個腳本的未確定數量的SERIES。

編輯 目前使用 sh 作為shell但如果需要我可以使用另一個(即使這意味著我可能需要轉換一些東西,但它沒關係)

我的問題是:如何分配所需的系列 CURRENT

我試過了什麼?上面的例子(不起作用)和其他風格如:

CURRENT=$${SERIES$${IDX}}
CURRENT=${SERIES${IDX}}

EDIT2

我正在前往某事:

eval echo $`echo "SERIES$IDX"`

這將顯示正確的系列。但是我找不到分配它的方法 CURRENT

CURRENT=eval echo $`echo "SERIES$IDX"`

但我想更多的挖掘,我會找到一些東西。任何幫助雖然讚賞

EDIT3

好的,我找到了

eval "CURRENT=\$SERIES$IDX"
echo $CURRENT

顯示我的期望,所以 CURRENT 有合適的內容。


2
2018-05-22 08:37


起源




答案:


謝謝 這個 網站(可能還有其他人有類似的答案......):

#!/bin/sh

IDX=1
SERIES1="a b c d e f g"
SERIES2="h i j k l m n"

eval "CURRENT=\$SERIES$IDX"

現在 CURRENT 持有的內容 SERIES1。如果我改變 IDX 到2然後我明白了 SERIES2 內容。


3
2018-05-22 10:01





這不是你想要的,但如果你使用 bash 代替 sh 然後你可以使用數組:

IDX=1
SERIES[1]="a b c d e f g"
SERIES[2]="h i j k l m n"

CURRENT=${SERIES[$IDX]}

1
2018-05-22 09:50



謝謝。我把它作為最後的選擇,但我找到了一個方法 sh - JScoobyCed