Используйте функцию system()
:
awk '{printf("%s ",$1); system("d2h " $2)}' file
Для записи, в zsh
, где эквивалентом bash
's ${!b}
является${(P)b}
(и где ${#array[@]}
также можно записать $#array
, как в csh)
$ a=(1 2 3 4) b=a
$ echo ${(P)#b}
4
В bash
, если вы действительно хотели использовать ${!b}
косвенность, вы всегда могли:
$ a=(1 2 3 4)
$ b='b[(b=${#a[@]}),0]'
$ echo "${!b}"
4
Вы можете использовать тот же трюк, чтобы иметь переменную, которая динамически расширяется до количества элементов в $a
с помощью:
$ typeset -n b='x[(x=${#a[@]}),0]'
$ echo "$b"
4
$ a+=(more)
$ echo "$b"
5
(здесь используется x
вместо b
, поскольку bash
жалуется, если nameref ссылается на себя ).
Или вы всегда можете использоватьeval
:
$ a=(1 2 3 4) b=a
$ eval 'echo "${#'"$b"'[@]}"'
4
С косвенными переменными нужно поступать именно так.
С помощью namerefs (bash 4.3+ )вы можете сделать
a=(1 2 3 4)
declare -n b=a
echo "${#b[@]}"