我有以下shell脚本,让我们说'name 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 :(得分:0)
您正在询问如何使用变量来命名变量。标准POSIX方法是使用eval
。
$ a_x="Hello world"
$ foo="a"
$ eval echo "\$${foo}_x"
Hello world
请注意转义的美元符号,该符号用于展开因扩展第一个变量而导致的 eval uated变量。
大多数人会告诉你,你可能不应该使用eval,这是危险的,不守规矩的。我也会告诉你这个,虽然有些情况下eval完全符合你的需要,你可以控制它的输入。
相反,bash提供了一种称为“间接”的东西(你可以在man bash
中搜索)。你这样使用它:
$ a_x="Hello world"
$ foo=a
$ bar="${foo}_x"
$ echo "${!bar}"
Hello world
注意额外的变量。