Создание функции, отображающей имя переменной и ее значение

Я хочу написать функцию (назовем ее superEcho), которая принимает имя переменной в качестве входного. Функция должна печатать имя этой переменной и ее значение

function superEcho { echo "$1: ?????" } var=100 superEcho var 

Я хочу, чтобы этот скрипт возвращался

 var: 100 

Но я не знаю, что я должен поставить вместо "?????" в функции superEcho.

2 Solutions collect form web for “Создание функции, отображающей имя переменной и ее значение”

POSIXly:

 superEcho() { eval 'printf "%s\n" "$1: ${'"$1"'}"' } 

Как и для bash -специфического ${!var} , который ожидает, что $1 будет дезинфицирован и содержит допустимое имя переменной. В противном случае это будет означать произвольную инъекцию командной инъекции.

Вы можете сделать санитацию в функции:

 superEcho() { case $1 in ("" | *[!_0-9abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]* | [0-9]*) printf >&2 'Invalid variable name: "%s"\n' "$1" return 1;; (*) eval 'printf "%s\n" "$1: ${'"$1"'}"' esac } 

Обратите внимание, что для переменных массива типа или ассоциативного массива в bash или ksh (POSIX sh не имеет массива, кроме "$@" который вы не могли бы использовать здесь, поскольку это были бы аргументы самой функции superEcho ), который только печатает значение элемента индекса 0 , а в zsh – вывод конкатенации значений с первым символом $IFS (и с символами SPC в yash ).

В ksh , zsh , bash или yash (4 Bourne-подобные оболочки с поддержкой массива). См. Также typeset -p var для печати определения и атрибутов переменной.

Используйте ${!variablename} :

 function superEcho { printf '%s: %s\n' "$1" "${!1}" } 
  • bash - добавить пустую строку в heredoc через переменную
  • Как я могу объединить переменную оболочки с другими другими параметрами в моих командных строках?
  • Сценарий Bash для заполнения шаблона
  • Могу ли я определить тип переменной awk?
  • Каков наиболее эффективный способ grep для двух совершенно разных вещей и присвоения значений отдельным переменным?
  • Объем переменных при вызове функции из find
  • Как назначить вывод команды переменной без запуска команды в подоболочке?
  • Несколько входов в одной команде
  • перечислить файлы и сохранить их в переменных
  • Как присвоить значение переменной, когда значение содержит символ $ в ней
  • Как передать переменную в sftp?
  • Interesting Posts

    Невозможно прервать mpg123 при использовании буфера аудиовыхода (- буфер)

    Найти каталог, содержащий все файлы в моем списке

    Как определить системные общие библиотеки?

    передача двух переменных потоков в качестве входных данных в awk в скрипте

    Группировать по функциональности на Mac-адресе

    Программа Bash не выполняется, если перенаправление не сработает

    Не удается установить Linux Headers (Kali Linux)

    Что такое commit = 0 для ext4? mdadm не поддерживает его?

    Как удалить неиспользованный физический том из LVM?

    Может ли кто-нибудь изменить содержимое файла с разрешением 777 на сервере?

    зеркало сайта с wget, что только ответ с gzip

    Как chroot предоставить новую версию glibc для приложения?

    Как происходит связь между BeagleBoneBlack и особенностью его процедуры монтажа?

    Почему я запрашивал пароль при установке NOPASSWD, но я могу переключиться на корневую оболочку и запустить ту же команду без пароля?

    Информация о местонахождении Simfs hardlinks

    Linux и Unix - лучшая ОС в мире.