Использование sh -c в терминале
У меня есть эта командная строка, которую я ввожу в терминал, и она работает как задумано:
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 ответа
Решение
Одинарные кавычки не препятствуют расширению переменных внутри двойных кавычек:
$ 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