如何增加已在bash中定义的变量?这就是我的意思:
ID1="YAY1"
ID2="YAY2"
for (( c=1; c<=3; c++ ))
do
if [ "$SOMEOTHERVAR" = "ID$c" ]; then BLAH; fi
done
问题是,当它增加已定义的变量进行比较时,它认为ID $ c等于字符串ID1,而不是ID1等于YAY1,因此if语句总是计算为false。我希望这是有道理的。
感谢您的帮助!
的 的 ** * *** 更新的 * ** * **
感谢大家的帮助。最干净的解决方案是使用混合切割的单个阵列。可能不是最干净的方式,但效果很好。以下是一个片段:
# CONTACTS
declare -a EMAIL
EMAIL[1]="JS:jsmith@example.com"
EMAIL[2]="JD:jdoe@example.com"
EMAIL[3]="JK:jkennedy@example.com"
# FUNCTIONS
function EMAIL {
for i in "${!EMAIL[@]}"; do
POINTER="`echo ${EMAIL[$i]} | cut -d":" -f1`"; ADDRESS="`echo ${EMAIL[$i]} | cut -d":" -f2`";
if [ "$POINTER" = "$PEMAIL" ]; then TO="$ADDRESS"; fi
if [ "$POINTER" = "$SEMAIL" ]; then CC="$ADDRESS"; fi
done
}
PEMAIL和SEMAIL是在脚本的另一部分从数据库中提取的比较器。
答案 0 :(得分:2)
创建一个构建变量名的中间变量(我称之为newVar)。然后解除引用。以下代码将打印“匹配索引2”
ID1="YAY1"
ID2="YAY2"
for (( c=1; c<=3; c++ ))
do
newVar="ID${c}"
if [ "YAY2" = "${!newVar}" ]; then echo "match for index $c"; fi
done
答案 1 :(得分:1)
在你的例子中,使用数组是有意义的,因为变量的最后部分仍然是一个整数:
declare -a ids
ids[1]="YAY1"
ids[2]="YAY2"
for (( c=1; c < 3; c++ )); do
if [ "$SOMEOTHERVAR" = "${ids[c]}" ]; then
BLAH
fi
done
如果它不总是一个整数,并且你有bash 4,你可以使用一个关联数组:
declare -A ids
ids['glow']="YAY1"
ids['stix']="YAY2"
for c in glow stix; do
if [ "$SOMEOTHERVAR" = "${ids[c]}" ]; then
BLAH
fi
done
答案 2 :(得分:0)
没有C风格循环的解决方案:
ID1="YAY1"
ID2="YAY2"
for name in ${!ID*}; do
if [ "$SOMEOTHERVAR" == "${!name}" ]; then echo "match for $name"; fi
done
$ {!ID *}扩展为前缀为“ID”的所有变量列表。