Почему awk арифметика не работает? - PullRequest
1 голос
/ 07 декабря 2011

У меня есть простой скрипт:

#!/bin/sh
#NOTE - this script does not work!
#column=${1:-1}
column=1+1
awk '{print $'$column'}'

Но при запуске

ls -la | ~/test/Column.sh

получаю всегда

1
1
1
1

В чем проблема?

Ответы [ 2 ]

3 голосов
/ 07 декабря 2011

Ваш скрипт эквивалентен:

awk '{print $1+1}'

Awk пытается добавить один к первому столбцу вывода ls -al в вашем примере, который является битом типа файла и режима. Это не число, поэтому оно конвертируется в 0. Добавьте единицу к нулю, и вы получите результат.
Смотрите здесь :

Строки, которые нельзя интерпретировать как действительные числа, конвертируются в ноль.

Если вы хотите, чтобы оболочка рассчитала число, попробуйте:

column=$(expr 1 + 1)

или даже

column=$((1 + 1))
1 голос
/ 07 декабря 2011

Если это чисто оболочка Борна, вместо:

column=1+1

Попробуйте это:

column=`expr 1+1`

Если это bash, оно должно быть:

column=$[1+1]

Смотрите здесь: http://linuxreviews.org/beginner/bash_GNU_Bourne-Again_SHell_Reference/#toc12

...