Bash добавить конечные пробелы, чтобы оправдать строку

Мой текущий код выглядит так: x=${y:0:40} , что ограничивает длину строки до 40 символов. В случае, если строка короче 40 символов, возможно ли заполнять зацепленные места пробелами?

Так что если мой y="very short text"

Я хотел бы, чтобы мой y был:

y = "очень короткий текст (+25 конечных пробелов) "

3 Solutions collect form web for “Bash добавить конечные пробелы, чтобы оправдать строку”

Если эти символы являются однобайтными, то есть, если вы находитесь в локали, где charset является однобайтовой (например, iso8859-1), или если кодировка locale является UTF-8, но текст является только ASCII, вы можете сделать :

 printf -vy %-40.40s "$y" 

Это будет охватывать как усечение, так и отступы.

Если нет, вы всегда можете добавить 40 пробелов и использовать подход ${y:0:40} .

 printf -v pad %40s y=$y$pad y=${y:0:40} 

zsh имеет выделенных операторов для левого и правого заполнения:

 y=${(r:40:)y} 

(также делает усечение). zsh printf считается в символах вместо байтов, поэтому не было бы проблем с bash выше. Однако учтите, что для опции -v вам нужен zsh 5.3 или новее.

См. Также этот ответ на соответствующий вопрос для получения более подробной информации, если вы столкнулись с символами, у которых не все одинаковые ширины.

Вы должны попробовать printf :

 printf '%-40s' "$y" 

Чистый bash :

 ten=" " forty="$ten$ten$ten$ten" y="very short text" y="${y:0:40}${forty:0:$((40 - ${#y}))}" echo "'${y}'" 

Метод состоит в том, чтобы добавить 0-40 пробелов к каждой строке после ее усечения.

Вывод (обратите внимание на позиции одиночной кавычки):

 'very short text ' 
  • как позволить bash читать «нажатую клавишу» во время нажатия не после нажатия ENTER
  • Проблема с сценарием UNIX
  • Можно ли указать пользовательскую команду перед запуском интерактивной сессии bash?
  • Как я могу постоянно запускать скрипт bash, проверяя, изменилось ли значение?
  • Удаление файла с непечатаемыми символами
  • Запишите любую команду, похожую на `time`
  • Сепаратор между списком команд и}
  • Помогите понять код bash?
  • замена backtick на $ () не работает
  • Bash - Как я могу сделать «Нажмите любую клавишу, чтобы продолжить»
  • Является ли оболочка созданной `bash -i -c <command>` интерактивной?
  • Linux и Unix - лучшая ОС в мире.