Mam następującą linię:
printf "---- %.55s\n" "$1 --------------"
Po uruchomieniu tego w bash pojawia się następujący błąd:
printf: -: nieprawidłowa opcja printf: użycie: printf [-v var] format [argumenty]
Jest tak, ponieważ (myślę) printf interpretuje ciąg „----” jako początek argumentu. Próbowałem uciec przed tym za pomocą „\”:
printf "\---- %.55s\n" "$1 --------------"
Oto wynik:
\---- content of $1 -------
Jak widać „\” stało się częścią wyjścia, czego nie chcę.
Pytanie brzmi: jak mogę przekonać printf, że nie próbuję przekazać długiego argumentu ?
-
ciągu formatu formatem jego ósemkowej reprezentacji (tutaj,\055
) powinno działać. Jednak nie jest to najczystsze. Jak wprintf '\055\055\055\055\055 %.55s\n' "$1 --------------"
Odpowiedzi:
Aby uniknąć
-
interpretacji argumentu jako opcji, masz kilka różnych możliwości:1) Przenieś znaki minus z ciągu formatu na ciąg argumentu, prawdopodobnie odzwierciedlając nową długość wydrukowanego ciągu w specyfikatorze
%.s
formatu. Jak w:2)
bash
wbudowane polecenia akceptują--
jako opcję, która nakazuje im przerwać przetwarzanie opcji i traktować wszystko, co następuje, jako nazwy plików i argumenty. Jak w:3) Możesz zastąpić znaki minus ich kodami ósemkowymi. W rzeczywistości zastąpienie tylko pierwszego działa, jak w:
źródło