printf ciąg w cudzysłowie

Oct 02 2020

Próbuję utworzyć tabelę w bash - zebrałem wszystkie nagłówki w var - jednak kiedy wydrukuję te ciągi zawarte w "są traktowane jako nowe kolumny a nie jako jeden przez polecenie printf

Kiedy przekazuję te same wartości bezpośrednio, działa to dobrze, ale zachowuję się inaczej, gdy zamiast tego używam $ var.

$ printf '%-20s' "some spaced words" other values; echo -e "\n"
some spaced words   other               values

$ values='"some spaced words" other values' $ echo $values "some spaced words" other values $ printf '%-20s' $values; echo -e "\n"
"some               spaced              words"              other               values

Wyraźnie nie rozumiem czegoś na temat tego, czym różni się moja zmienna, < some string >a co za tym idzie, powoduje inne zachowanie.

Jak uzyskać dane wyjściowe, które pasują do wyjścia 1, gdy używam zmiennej?

edycja: Widzę, że wersja var ma cudzysłowy - czy jest sposób, aby przekazać cytowane ciągi do printf jako zmienną?

Odpowiedzi

7 choroba Oct 02 2020 at 19:08

Zmienna jest interpretowana przed wykonaniem przez powłokę jakiegokolwiek polecenia, tj. printfTutaj, a podział na słowa następuje po rozwinięciu zmiennej. Użyj tablicy zamiast zmiennej skalarnej:

values=('some spaced words' other values)
printf %-20s "${values[@]}"