KornShell Printf - Заполнение строки
Я пытаюсь написать функцию KornShell (ksh), которая использует printf для заполнения строки до определенной ширины.
Примеры:
Вызов
padSpaces Hello 10
Выход
'Hello '
В настоящее время у меня есть:
padSpaces(){
WIDTH=$2
FORMAT="%-${WIDTH}.${WIDTH}s"
printf $FORMAT $1
}
Изменить: Это, кажется, работает само по себе, но когда я назначаю это в сценарии, кажется, теряет все, кроме первого пробела.
TEXT=`padSpaces "TEST" 10`
TEXT="${TEXT}A"
echo ${TEXT}
Выход:
TEST A
Я также открыт для предложений, которые не используют printf. На самом деле я пытаюсь получить файл фиксированной ширины из ksh.
2 ответа
Ваша функция работает нормально для меня. Ваше задание не будет работать с пробелами вокруг знака равенства. Так должно быть:
SOME_STRING=$(padSpaces TEST 10)
Я взял на себя смелость заменить тылы тоже.
Вы не показываете, как вы используете переменную или как вы получили результат, который вы показали. Однако ваша проблема может заключаться в том, что вам нужно заключать в кавычки свои переменные. Вот демонстрация:
$ SOME_STRING=$(padSpaces TEST 10)
$ sq=\'
$ echo $sq$SOME_STRING$sq
'TEST '
$ echo "$sq$SOME_STRING$sq"
'TEST '
Знаете ли вы, что вы определяете функцию под названием padSpaces
еще позвони по имени padString
? В любом случае, попробуйте это:
padString() {
WIDTH=$2
FORMAT="%-${WIDTH}s"
printf $FORMAT $1
}
Или более компактный:
padString() {
printf "%-${2}s" $1
}
Знак минус говорит printf
выравнивание по левому краю (вместо выравнивания по умолчанию по правому краю). Как говорится на странице руководства о команде printf format [ arg ... ]
,
Аргументы arg выводятся на стандартный вывод в соответствии с правилами форматирования ANSI-C, связанными с форматом строки формата.
(Я только что установил ksh
проверить этот код; работает на моей машинеТМ.)