#shell
#оболочка
Вопрос:
Я хочу повторить $ANMIAL0, а затем $ANIMAL1, используя приведенный ниже скрипт. Но я получаю line 7: ${ANIMAL$i}: bad substitution
сообщение об ошибке. Что не так?
#!/bin/sh
ANIMAL0="tiger"
ANIMAL1="lion"
i=0
while test $i -lt 2; do
echo "Hey $i !"
echo ${ANIMAL$i}
i=`expr $i 1`
done
Ответ №1:
Вероятно, вам лучше использовать массив вместо ANIMAL0
and ANIMAL1
. Может быть, что-то вроде этого?
#!/bin/bash
animals=("Tiger" "Lion")
for animal in ${animals[*]}
do
printf "Hey, ${animal} n"
done
Использование eval
приведет к неприятностям в будущем и не является лучшей практикой для того, что вы пытаетесь сделать.
Комментарии:
1. Что ж, если вы в конечном итоге используете этот метод вместо этого, пожалуйста, отметьте это как правильный ответ. Кроме этого, рад помочь 🙂
Ответ №2:
Проблема в том, что оболочка обычно выполняет один проход подстановки. Вы можете принудительно выполнить второй проход с eval
помощью , но это, очевидно, связано с обычными предостережениями безопасности (не оценивайте непроверенный пользовательский ввод и т. Д.).
eval echo $ANIMAL$i
Bash имеет различные конструкции, которые помогут избежать eval
.
Ответ №3:
Вы можете использовать eval
eval echo $ANIMAL$i