2016-07-14 54 views
0

組裝可變我有以下的shell腳本,假設它的名字test.sh如何通過串

#!/bin/bash 
b_x='it is the value of bx' 
c_x='it is the value of cx' 

case "$1" in 
    "b") 
     echo $1_x # it's doesn't work; I want to echo $b_x 
     ;; 
    "c") 
     echo $1_x # it's doesn't work; I want to echo $c_x 
     ;; 
esac 

然後我想調用腳本;

./test.sh b # I want the output is "it is the value of bx" 
./test.sh c # I want the output is "it is the value of cx" 
+0

問題是什麼?你目前的產出是多少? –

回答

3

您不需要case。只需使用間接變量名擴展:

b_x='it is the value of bx' 
c_x='it is the value of cx' 

var="${1}_x" 
echo "${!var}" 

然後運行它爲:

$> bash test.sh b 
it is the value of bx 

$> bash test.sh c 
it is the value of cx 
+1

它的工作原理!非常感謝! – Stony

0

你詢問如何使用一個變量名稱的變量。標準POSIX方法將使用eval

$ a_x="Hello world" 
$ foo="a" 
$ eval echo "\$${foo}_x" 
Hello world 

注逃脫的美元符號,這是用來擴大所造成的擴大第一變量EVAL uated變量。

大多數人會告訴你,你可能不應該使用評估,這是危險的,不守規矩。我也會告訴你這一點,雖然有些情況下eval確實是你需要的,你可以控制它的輸入。

相反,bash提供了一種叫做「間接」的東西(你可以在man bash中搜索)。你這樣使用它:

$ a_x="Hello world" 
$ foo=a 
$ bar="${foo}_x" 
$ echo "${!bar}" 
Hello world 

注意額外的變量。