如何按字符串

时间:2016-07-14 10:25:54

标签: linux shell

我有以下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"

2 个答案:

答案 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

注意额外的变量。