Bash脚本变量替换

时间:2012-02-03 22:00:40

标签: linux bash variables substitution

我正在尝试将一些文本组合到变量中并输出组合变量的值。例如:

testFILE=/tmp/some_file.log
function test_param {
echo $1
echo test$1
echo $(test$1) #this is where I want to output the value of the combined variable
}

test_param FILE

输出将是:

FILE
testFILE
/tmp/some_file.log  <-- this is what I can't figure out.

有什么想法吗?

如果我没有使用正确的术语,请纠正我。

谢谢, 贾里德

5 个答案:

答案 0 :(得分:4)

尝试以下方法:

#!/bin/bash
testFILE=/tmp/some_file.log
function test_param {
    echo $1
    echo test$1
    varName=test$1
    echo ${!varName}
}

test_param FILE

!之前的varName表示它应该根据$varName的内容查找变量,因此输出为:

FILE
testFILE
/tmp/some_file.log

答案 1 :(得分:2)

你的意思是:

#!/bin/bash

testFILE=/tmp/some_file.log
function test_param {
echo $1
echo test$1
eval "echo \$test$1"
}

test_param FILE

输出:

FILE
testFILE
/tmp/some_file.log

答案 2 :(得分:2)

试试这个:

testFILE=/tmp/some_file.log
function test_param {
    echo $1
    echo test$1
    foo="test$1"
    echo ${!foo}
}

${!foo}是间接参数扩展。它表示取foo的值并将其用作要扩展的参数的名称。我认为你需要一个简单的变量名称;我试了${!test$1}没有成功。

答案 3 :(得分:1)

使用${!varname}

testFILE=/tmp/some_file.log
function test_param {
    local tmpname="test$1"
    echo "$1 - $tmpname"
    echo "${!tmpname}"
}

test_param FILE

输出:

FILE - testFILE
/tmp/some_file.log

答案 4 :(得分:0)

这对我有用。我都输出了结果,并把它藏为另一个变量。

#!/bin/bash

function concat
{
    echo "Parameter: "$1

    dummyVariable="some_variable"

    echo "$1$dummyVariable"

    newVariable="$1$dummyVariable"

    echo "$newVariable"
}


concat "timmeragh "

exit 0

输出结果为:

Parameter: timmeragh
timmeragh some_variable
timmeragh some_variable