Здравствуйте!#!/bin/sh
iVal = 666;
ls -al | awk '{printf("%s - %d\n", $0, 666)}'Не могу вместо 666 передать значение переменной iVal.
ls -al | awk '{printf("%s - %d\n", $0, $iVal)}' не работает.Помогите решить проблемку. Я еще слаб в шеле...
>Здравствуйте!
>
>#!/bin/sh
>iVal = 666;
>ls -al | awk '{printf("%s - %d\n", $0, 666)}'
>
>Не могу вместо 666 передать значение переменной iVal.
>ls -al | awk '{printf("%s - %d\n", $0, $iVal)}' не работает.awk -v iVal="666" '{...}'
>>Здравствуйте!
>>
>>#!/bin/sh
>>iVal = 666;
>>ls -al | awk '{printf("%s - %d\n", $0, 666)}'
>>
>>Не могу вместо 666 передать значение переменной iVal.
>>ls -al | awk '{printf("%s - %d\n", $0, $iVal)}' не работает.ls -al | awk -v iVal="666" '{printf("%s - %d\n", $0, iVal)}'
В общем случае при одинарных кавычках шелл вообще никак не интерпретирует содержимое. При двойных происходит "интерполяция переменных", то есть вместо $что_нибудь, подставляется значение переменной что_нибудь. Проблема возникает при использовании perl, awk и других язвков в которых для переменных также используется $. Как один из вариантов использовать двойные кавычки вместе с экранированием при помощи \. Например такiVal=666;ls -al | awk "{printf(\"%s - %d\n\",\$0, $iVal)}"
>iVal=666;ls -al | awk "{printf(\"%s - %d\n\",\$0, $iVal)}"Третий %) вариант: чтобы не заниматься "экранированием всего остального" -
iVal=666;ls -al | awk '{printf("%s - %d\n",$0, '$iVal')}'
В более общем случае (~ $iVal содержит пробелы) может потребоваться писать
'... ... ...'"$iVal"'... ... ...'ps: Disclaimer: GNU/Linux, bash, gawk -- YMMV
pps: эээ... гм, :) кстати: '{$0=$0" - '$iVal'";print}'