Как использовать значение одной переменной в качестве имени другой переменной в альтернативном расширении значения (${var+alt}
) в bash?Использовать строку как имя переменной bash в альтернативном расширении значения
Я думаю, что
#!/bin/bash
cat='dog'
varname='cat'
if [ -z ${`echo "${varname}"`+x} ]; then
echo 'is null'
fi
должен быть примерно эквивалентен
#!/bin/bash
if [ -z ${dog+x} ]; then
echo 'is null'
fi
, но когда я пытаюсь сделать это, я получаю
${`echo "${cat}"`+x}: bad substitution
Я думаю часть проблемы заключается в том, что подоболочка, выполняющая подстановку команд, уже не знает о $varname
? Мне нужно экспортировать эту переменную?
Моя причина этого в том, что я узнал от this answer как проверить, если переменная равна нулю, и я стараюсь, чтобы инкапсулировать эту проверку в функции под названием is_null
, как это:
function is_null {
if [ $# != 1 ]; then
echo "Error: is_null takes one argument"
exit
fi
# note: ${1+x} will be null if $1 is null, but "x" if $1 is not null
if [ -z ${`echo "${1}"`+x} ]; then
return 0
else
return 1
fi
}
if is_null 'some_flag'; then
echo 'Missing some_flag'
echo $usage
exit
fi
Я думаю, что вам это нужно http://stackoverflow.com/questions/26337826/in-linux-shell-script-how-can-i-recall-value-of-variable/26337979#26337979 –
@ Ashwani Спасибо, это то, что мне нужно. Я изменил свой оператор if на 'if [-z $ {! 1 + x}]; затем ... ' –