仅通过bash获取一个字符串中顺序变量的值



我有以下字符串:

testString="variable1=example1 variable2=example2"

我需要一种方法通过bash来推断example1变量variable1.

注意:我事先知道将在该字符串中的变量名,因此variable1variable2,我需要强制搜索这些名称。

我是实际构建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#*=}的解释。

最新更新