возвращает числовое значение индексированной переменной, а не ее имя

Следующий фрагмент кода иллюстрирует мою проблему, я боюсь, я слишком упростил ее в первом раунде.

#!/bin/bash dogLover=1 catLover=2 for ii in dog cat do petLover=${ii}Lover echo (evaluate $petLover) done 

Я хочу, чтобы код возвращал числовые значения 1 и 2, а не собаку и кошку. Предположительно, это легко сделать, но я не могу видеть, как в Интернете.

То, что мне действительно нужно, это эквивалент bash команды eval в matlab

3 Solutions collect form web for “возвращает числовое значение индексированной переменной, а не ее имя”

Хотя СтефанЧазелас сказал правильно, что вы можете использовать eval , в качестве общей практики многие люди стараются держаться подальше от eval.

Для этого вы можете использовать «косвенное расширение». Это багизм, который используется, когда у вас есть переменная, содержащая имя другой переменной. Чтобы использовать его, просто префикс переменной с помощью ! внутри фигурной скобки.

Например:

 # var=foobar # varname=var # echo "${!varname}" foobar 

Недостатком этого является то, что это не POSIX. Это означает, что он не гарантированно доступен для всех оболочек. Но поскольку теги на ваш вопрос включали bash , это может быть приемлемым.

Для разыменования в любой оболочке Bourne или POSIX:

 dogLover=1 ii=dog eval "petLover=\${${ii}Lover}" echo "$petLover" 

В цикле for вы не используете текст «собака» и «кошка», а не переменные.

использование

 for ii in $dog $cat ; do 

это будет расширяться до

 for ii in 1 2 ; do 
  • Псевдонимы в csh
  • отметка времени перед эхом
  • grep script - выводит строки одновременно в эхо
  • НЕ закрывайте telnet при подаче имени пользователя и пароля с помощью эха
  • Как мне ожидать «echo -e»? \ С»?
  • добавление пустой первой строки внутри файла csv
  • Является ли «кошка» встроенной оболочкой или внешней программой?
  • понимание выхода эха, за которым следуют некоторые восклицательные знаки
  • BC возвращает синтаксическую ошибку
  • команда print вместо echo в linux
  • Какой самый безопасный, самый переносимый способ вызвать двоичный код echo?
  • Linux и Unix - лучшая ОС в мире.