我有以下字符串:
testString="variable1=example1 variable2=example2"
我需要一种方法通过bash来推断example1变量variable1.
注意:我事先知道将在该字符串中的变量名,因此variable1
和variable2
,我需要强制搜索这些名称。
我是实际构建testString
的人并且我使用了1个空间
类似eval
-
$: testString="variable1=example1 variable2=example2"
$: declare $testString # unquoted!
$: echo $variable1
example1
但我希望这是一个XY问题。
难道不更好(正如tjm3772在评论中建议的)
$: declare -A testvals=(["variable1"]="example1" ["variable2"]="example2")
$: echo "${testvals[variable1]}"
example1
或者
$: variable=( "" example1 example ) # empty cell zero
$: echo "${variable[1]}"
example1
?
由于事先知道了变量名,下面的Shellcheck-clean代码演示了一种安全的方法:
#! /bin/bash -p
testString="variable1=example1 variable2=example2"
read -r -a vars <<<"$testString"
for v in "${vars[@]}"; do
case $v in
variable1=*) variable1=${v#*=};;
variable2=*) variable2=${v#*=};;
esac
done
printf 'variable1=%sn' "$variable1"
printf 'variable2=%sn' "$variable2"
- 代码假设变量值中没有空格或制表符。
- 参见移除字符串的一部分(BashFAQ/100(如何在bash中进行字符串操作?))来了解
${v#*=}
的解释。