2016-02-18 6 views
0

Привет Я использую GNU AWK версии 3.1.5 и я указал 2 переменные в скрипте KSHпеременных AWK оболочки не работает

PKNAME= ls -lt /var/db/pkg | tr -s " " | cut -d" " -f9 
PKDATE= ls -lt /var/db/pkg/$PKNAME/ | tr -s " " | cut -d" " -f6-8 

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

echo bar  
awk -F, -v pkname="$PKNAME" -v pkdate="$PKDATE" 'BEGIN{print pkname, pkdate, "foo"; exit}' 
echo baz 

выходной сигнал от этого результатов в 2 пустых пространств и обув, как так

bar 
    foo 
baz 

Я попытался , двойное цитирование переменных, одинарные кавычки и обратные тики. Также попробовали двойные кавычки с обратными тиками.

Любые идеи, почему переменные не выполняются? Я довольно новичок в awk и ценю любую помощь! Спасибо

Возможно, возможно, что в командной строке awk невозможно выполнить команду sub shell. Это правда?

ответ

1

Это не имеет никакого отношения к awk. Проблема в том, как вы назначаете свои переменные. Ваши линии должны быть такими:

PKNAME=$(ls -lt /var/db/pkg | tr -s " " | cut -d" " -f9) 

Там может быть без пробелов вокруг обеих сторон уступки в оболочке.

В настоящий момент вы используете команду ls -lt ... с переменной PKNAME, временно назначенной пустой строке. В последующих командах переменная остается неустановленной.

Ваша команда awk должна оставаться неизменной, то есть переменные оболочки должны передаваться как -v pkname="$PKNAME". В стороне, как правило, считается неправильной практикой использовать имена переменных верхнего регистра, поскольку они должны быть зарезервированы для внутреннего использования оболочкой.

+0

Awesome! Это работает, примером, над которым я работал, были строки, а не команды, поэтому я цитировал. Большое спасибо! – rayray84

+0

Я изменю переменные на нижний регистр, я попытался экспортировать их в качестве переменных среды для использования и никогда не менял их. Я ценю вашу помощь! – rayray84

Смежные вопросы