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

Я хочу написать функцию (назовем ее 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}" } 
  • Переменная в команде find задана новой переменной в bash
  • Объявление переменной параллельным sh -c ...
  • Может ли awk использовать идентификаторы полей также для строк оболочки (переменных)?
  • Переменные баша в команде
  • Как вы обрабатываете несколько правил валидации при различных пользовательских вводах?
  • Как добавить текст в переменную в make-файле?
  • Объем переменных при вызове функции из find
  • Могу ли я определить тип переменной awk?
  • Как выбрать количество цифр в переменной в моих сценариях?
  • Bash: Объем переменных в цикле for с использованием тройника
  • команда find не дает никакого вывода
  • Linux и Unix - лучшая ОС в мире.