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 ' 
  • Что не так с этим кодом?
  • Понять смысл `$ _`
  • разница между `for i в {1 .. $ N}` и `для i в $ (seq 1 1 $ N)`
  • Как перенаправить stderr на переменную внутри if condition? удар
  • Отправить массив для функции подоболочки с трубкой?
  • Получение «нет такого файла или каталога», хотя файл явно присутствует
  • Почему этот код не работает?
  • Должен ли я регулярно добавлять двойные кавычки вокруг своих эхо-заявлений?
  • Как встроить групповой шаблон в bash?
  • Является ли индекс индексированного массива арифметическим расширением?
  • Предупреждение mdoc: пустая строка ввода #xx
  • Linux и Unix - лучшая ОС в мире.