1

У меня есть следующая строка:

printf "---- %.55s\n" "$1 --------------"

Когда я запускаю это под Bash, я получаю следующую ошибку:

printf: -: неверная опция printf: использование: printf [-v var] формат [аргументы]

Это потому, что (я думаю) printf интерпретирует строку «----» как начало аргумента. Я пытался избежать этого с помощью "\", например, так:

printf "\---- %.55s\n" "$1 --------------"

Ниже приводится результат:

\---- content of $1 -------

Как вы можете видеть, «\» стал частью вывода, что не то, что я хочу.

Итак, вопрос в том, как я могу убедить printf, что я не пытаюсь передать длинный аргумент?

1 ответ1

1

Чтобы избежать начала аргумента - интерпретации как опции, у вас есть несколько разных альтернатив:

1) Переместите знаки минуса из строки формата в строку аргумента, возможно, отражая новую длину напечатанной строки в спецификаторе формата %.s . Как в:

$ printf "%.60s\n" "---- $1 --------------"

2) встроенные команды bash принимают -- как параметр, который указывает им прекратить обработку параметров и рассматривать все последующее как имена файлов и аргументы. Как в:

$ printf -- "---- %.55s\n" "$1 --------------"

3) Вы можете заменить знаки минус их восьмеричными кодами. На самом деле, замена только первого работает, как в:

$ printf "\055--- %.55s\n" "$1 --------------"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .