2016-07-14 3 views
0

У меня есть следующий скрипт, скажем, ее название 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, вызванное расширением первой переменной.

Большинство людей скажут вам, что вы, вероятно, не должны использовать eval, это опасно и непокорно. Я также расскажу вам об этом, хотя бывают случаи, когда eval делает именно то, что вам нужно, и вы можете контролировать его вход.

Вместо этого bash предлагает нечто, называемое «косвенным» (которое можно найти в man bash). Вы используете его следующим образом:

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

Обратите внимание на дополнительную переменную.

Смежные вопросы