Переменная передана в скрипт оболочки, используемый awk - PullRequest
0 голосов
/ 22 марта 2020

В моем скрипте bash есть следующее (вызывается другим скриптом, который передает ему переменные):

psql -qtAX -h "$1" -p "$2" -U "$3" -d "$4" -f "/script/test.sql"

Теперь я хочу изменить это на:

psql -qtAX -h "$1" -p "$2" -U "$3" -d "$4" -f "/script/test.sql" |
awk {print "$2"}'

Однако это не дает мне правильного вывода, поскольку переменная $ 2, используемая awk, по умолчанию имеет значение переменной $ 2 (которая в приведенном ниже примере составляет 5432), которая была передана в сценарий (вместо того, чтобы получать его из вывод по конвейеру).

psql -qtAX -h testhost -p 5432 -U user -f "/script/test.sql" |
awk {print "$2"}'

Как мне сделать так, чтобы вместо этого он получал значение $ 2 из конвейерного вывода?

1 Ответ

2 голосов
/ 22 марта 2020

Вы были близки. Скрипты awk обычно заключаются в одинарные кавычки, чтобы избежать интерполяции (замены переменных) переменных поля awk. В вашем случае $2 имеет значение для оболочки, поэтому ее необходимо экранировать одинарными кавычками.

Попробуйте:

psql -qtAX -h "$1" -p "$2" -U "$3" -d "$4" -f "/script/test.sql" | awk '{print $2}'
...