строка в кавычках printf

Oct 02 2020

Я пытаюсь создать таблицу в bash - я собрал все заголовки в var - однако, когда я печатаю эти строки, заключенные в ", они обрабатываются как новые столбцы, а не как один командой printf

Когда я передаю одни и те же значения напрямую, он работает нормально, но я получаю другое поведение, когда вместо этого использую $ 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

Я явно не понимаю, чем моя переменная отличается < some string >и, следовательно, приводит к другому поведению.

Как получить результат, соответствующий выводу 1, при использовании переменной?

edit: я вижу, что версия var имеет кавычки - есть ли способ передать строки в кавычках в printf в качестве переменной?

Ответы

7 choroba Oct 02 2020 at 19:08

Переменная раскрывается до того, как оболочка запускает любую команду, т.е. printfздесь, а разделение слов происходит после расширения переменной. Используйте массив вместо скалярной переменной:

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