从脚本中获取传递字符串的内容

从脚本中获取传递字符串的内容

我想在输出中获取此脚本的“for”的KW0_TEXT内容:KW1_TEXT

#!/bin/sh
STRS=" KW0 KW1 "
KW0_TEXT="text text text"
KW1_TEXT="text text  text text"
for str in ${STRS}; do
echo ${str}_TEXT
eval echo ${str}_TEXT
done

到目前为止,在输出中,我只得到:

KW0_TEXT
KW0_TEXT
KW1_TEXT
KW1_TEXT

答案1

如果 /bin/sh 实际上是 /bin/bash,则可以使用变量间接寻址:

#!/bin/bash
STRS=" KW0 KW1 "
KW0_TEXT="text text text"
KW1_TEXT="text text  text text"
for str in ${STRS}; do
  var=${str}_TEXT
  printf "%s\n" "${!var}"
done

答案2

如果您的 /bin/sh 实际上是 /bin/bash,并且您的版本相当新,则可以使用关联数组

#!/bin/bash
strs=( KW0 KW1 )
declare -A text=( 
    [KW0]="text text text" 
    [KW1]="text text  text text" 
)
for str in "${strs[@]}"; do 
    printf "%s\t%s\n" "$str" "${text[$str]}"
done
KW0     text text text
KW1     text text  text text

答案3

问题是您在使用$中缺少文字eval。替换变量后,您正在评估的命令是

echo KW0_TEXT

但你想要

echo $KW0_TEXT

它应该是:

eval echo '$'${str}_TEXT

但是,如果您使用支持该方法的 shell,则 Jeff Schaller 的间接变量方法更可取。

相关内容