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

Согласно Intel , чтобы Wi-Fi работал на Intel® Dual Band Wireless-AC 8260 на debian, вам нужна версия ядра > 4.1 , также это невозможно для загрузки драйвера Wi-Fi во время установки, поскольку в стабильной версии используется версия ядра 3.16 ;

21
27.03.2017, 14:45
3 ответа

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

printf '%-40s' "$y"
28
27.01.2020, 19:43

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

printf -v y %-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 или новее.

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

30
27.01.2020, 19:43

Чистый 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                         '
13
27.01.2020, 19:43

Теги

Похожие вопросы