我想在输出中获取此脚本的“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 的间接变量方法更可取。