Подстановка переменных скрипта Bash - PullRequest
2 голосов
/ 04 февраля 2012

Я пытаюсь объединить некоторый текст в переменную и вывести значение объединенной переменной. Например:

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 ]

4 голосов
/ 04 февраля 2012

Попробуйте следующее:

#!/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
2 голосов
/ 04 февраля 2012

Попробуйте это:

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

${!foo} является косвенным расширением параметра. Он говорит, что нужно взять значение foo и использовать его как имя параметра для расширения. Я думаю, что вам нужно простое имя переменной; Я безуспешно пытался ${!test$1}.

2 голосов
/ 04 февраля 2012

Вы имеете в виду это:

#!/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
1 голос
/ 04 февраля 2012

Использование ${!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
0 голосов
/ 04 февраля 2012

Это сработало для меня. Я и вывел результат, и спрятал его как другую переменную.

#!/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
...