A segunda cota única encerra a primeira cadeia de caracteres com um único algarismo 'echo {}; awk '
. Em seguida, {print $1}
não é citada e, em seguida, há outra sequência com aspas simples ' {} | uniq'
. Isso deve ficar claro em qualquer editor com realce de sintaxe; também fica claro se você olhar o destaque da sintaxe em sua pergunta.
Aqui, a abordagem mais simples seria evitar completamente as citações aninhadas. Passe o script awk como um argumento para sh
.
xargs -I {} sh -c 'echo "$1"; awk "$0"' '{print $1}' {} | uniq'
(Eu também substituí o {}
dentro do script pelo argumento correspondente a sh
. Nunca use {}
dentro de um script: ele seria analisado como sintaxe do shell, não como um nome de arquivo, por isso iria falhar catastroficamente em qualquer nome de arquivo contendo caracteres especiais de shell.)
Para incluir efetivamente uma aspa simples em um literal com aspas simples, use '\''
(formalmente, isso termina o literal com aspas simples e, em seguida, adiciona uma aspa simples que é interpretada literalmente devido ao backflash anterior e inicia outra literal citado, mas o efeito é o mesmo).
xargs -I {} sh -c 'echo {}; awk '\''{print $1}'\'' {} | uniq'
Como alternativa, use aspas simples em um nível e aspas duplas no outro nível, mas fica mais complicado.
(Eu suponho que seus comandos sem sentido, como ls *
, sejam apenas um exemplo extremamente simplificado.)