Bash %s спецификатор формата исключает пробелы в строке при распечатке
Я начинаю использовать printf
вместо echo
, Мой первый прорыв в printf %s
это:
#!/bin/bash
danny=$(tail -1 /come/and/play/with/US.log| ~/walt/convert_gm_est)
printf "%s" $danny
08:02.020ZINFO<-casper/casperbox001wowSYSSTATS[sz=21,tag=0,aux=0]process_log2221397800
Это устраняет все пробелы в строке. Поэтому я добавил пробел после спецификатора формата. Строка выглядит лучше с пробелами, плюс я могу очень легко вырвать время с помощью awk. Я не вижу ничего об этом в Интернете. Я попробовал "%s\s"
и это не сработало. Это стандартная процедура для использования спецификаторов формата - используйте пробел после %s
? Это способ сделать это или я что-то упустил?
#!/bin/bash
danny=$(tail -1 /come/and/play/with/US.log| ~/walt/convert_gm_est)
printf "%s " $danny
08:02.020Z INFO <- casper/casperbox001wow SYSSTATS[sz=21, tag=0, aux=0] process_log 2221397 80 0 casper@casperbox001wow:~$
1 ответ
Когда оболочка оценивает:
printf "%s" $danny
оболочка расширит значение переменной danny
а затем разделить его на слова. Это также расширит глобусы в этих словах. Как только это будет сделано, выражение будет выглядеть примерно так (цитаты добавлены для пояснения):
printf '%s' '08:02.020Z' 'INFO' '<-' 'casper/casperbox001' 'wow0' 'SYSSTATS'...
printf
повторяет свою строку формата, пока все аргументы не будут использованы. Таким образом, используя строку формата %s
вызывает объединение аргументов без использования пробелов.
Вы, вероятно, хотели процитировать $danny
так что это будет представлено как один аргумент для printf:
printf "%s" "$danny"