1

У меня есть эта командная строка, которую я ввожу в терминал, и она работает как задумано:

dscl . -readall /Users UniqueID | awk '/^RecordName:/ {name=$2}; /^UniqueID: / {if ($2 > 500) print name}'

То, что я хочу сделать, это использовать sh -c "вставить строку команды здесь", и когда я пытаюсь использовать вышеприведенный оператор, он дает мне следующие ошибки:

awk: syntax error at source line 1
 context is
    /^RecordName:/ >>>  {name=} <<< 
awk: illegal statement at source line 1
awk: illegal statement at source line 1

Есть идеи, как бы я это исправить? Мне это нужно для программы в цель-с.

2 ответа2

4

Одинарные кавычки не препятствуют расширению переменных внутри двойных кавычек:

$ echo "a'$RANDOM'"
a'23976'

Вы можете заменить $ на \$ или ' на '\'':

$ sh -c "echo a b | awk '{print \$2}'"
b
$ sh -c 'echo a b | awk '\''{print $2}'\'
b

Или используйте heredoc:

sh -s <<'END'
echo a b | awk '{print $2}'
END
1

Ваша команда awk не закрывается ' .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .