cytowania wszystko jest źle. Dlaczego używasz pojedynczego cudzysłowu, ukośnika odwrotnego, pojedynczego cudzysłowu, pojedynczego cudzysłowu i zawsze w tej kolejności? Niezależnie od tego masz niecytowany podwójny cudzysłów, więc powłoka oczekuje, że dodasz wycenę zamykającą dla cytowanego ciągu, który zaczyna się od tego podwójnego cudzysłowu otwierającego.
Co do stylu, powinieneś także stracić numer Useless Use of Cat i pomyśleć o uproszczeniu skryptu. Co najmniej:
grep -v ^# /abc | grep -i root | sed -e 's/"//g' | awk '{print $2}'
... ale w praktyce
awk '/^#/ { next } /[Rr][Oo][Oo][Tt]/ { gsub ("\"",""); print $2 }' /abc
Ponieważ niektóre z tych znaków w skryptach awk
i sed
mają szczególne znaczenie dla powłoki, możemy umieścić je w pojedynczych cudzysłowach. Jeśli potrzebujesz pojedynczych cudzysłowów w skrypcie, musisz podwoić je; częsty wzorzec ma mieć ciąg w pojedynczych cudzysłowach przylegających do ciągu w podwójnych cudzysłowach, takich jak: echo '"'"'"
. To echo "
(cytowane w pojedynczych cudzysłowach) zaraz po nim '
(cytowane w podwójnych cudzysłowach).
Edytuj Zaktualizowana analiza problemu cytowania; dodany przykład kodu; poprawiony przykład kodu. Ostatnia edycja poprawia cytowanie gsub
w skrypcie awk i dodaje małą dyskusję o cytowaniu.
Co próbujesz zrobić? Innymi słowy, jakie są twoje dane wejściowe i wyjściowe? Mam wrażenie, że możesz wykonać swoje zadanie tylko z awk. –