Предположим, мы получаем файл с 1000 переменных: var1 = 50 .... var1000 = 100

Как я могу расширить эти переменные, чтобы, если я определяю аргумент, соответствующий var1 ... var1000, как строку, он отображал их значения? например:

 #!/bin/bash
 source file
 var3=$1 #assume that $1=var1
# [ variable substitution here ]

 if [ -z $var3 ];then
  echo "variable value is: ... " <-i want value of 50 to be printed
 else 
  echo "variable does not exist"
 fi

# (if $1=var1 or $1=var2)

Благодарность!

0
aprin 27 Окт 2015 в 12:09

2 ответа

Лучший ответ

Не совсем понимаю вопрос, но предположим, что вы хотите сделать что-то подобное. В этом случае вы хотите проверить значения в исходном файле.

Ниже используется косвенное расширение bash:

Основная форма расширения параметра - ${parameter}.

[...]

Если первым символом параметра является восклицательный знак (!), Он вводит уровень косвенного обращения к переменной. Bash использует значение переменной, сформированное из оставшейся части параметра , в качестве имени переменной; затем эта переменная расширяется, и это значение используется в остальной части подстановки, а не значение самого параметра . Это известно как indirect expansion.

#!/bin/bash

source file

var3="$1" #assume that $1=var1

if [[ -n ${!var3} ]];then 
#Check if the variable that has been sent to script has value in sourced file
    echo "variable value is: ${!var3}"
    #If it does echo the value
else
    echo "variable does not have value"
    #if it doesn't then state it has no value
fi

Применение

Предполагая, что var1=50 находится в файле, а var20 в файле нет, то ниже приведен пример использования.

$ ./script.sh var1
variable value is: 50
$ ./script.sh var20
variable does not have value
3
gniourf_gniourf 27 Окт 2015 в 10:25

В условии if используйте $((var3)) вместо $var3. Ваша проблема будет решена.

0
whoan 27 Окт 2015 в 10:04