Для вашей фактической проблемы , которая заключается в том, что «дана строка, создайте ту же -длину строку = = Я согласен с другими ответами на изменение строки с использованием bash, zsh, tr, sed и т. д.
Но для вашего поставленного вопроса , который заключается в том, что «данное число создает строку такой длины», причина, по которой ваш подход не сработал, заключается в том, что bash выполняет «расширение параметров» который включает${#1}
после расширения скобки ; см. руководство или информацию в разделе «Расширения оболочки» .
Некоторые способы, которыми вы можете создать строку, заданную только длиной:
%.0s
, но с программойseq
вместо раскрытия фигурных скобок (, потому что подстановка команд создает подоболочку, которая выполняется первой, и выполняет раскрытие параметров): printf '%s\n' "$1"; printf '=%.0s' $( seq ${#1} ); printf '\n'
printf
для создания заполнения, а затем измените его: # create a string of spaces equal to length of $1, then convert spaces to =
t=$(printf '%*s' ${#1} ''); printf '%s\n' "$1" "${t// /=}"
# create a string of zeros equal to length of $1, then convert zeros to =
t=$(printf '%0*d' ${#1} 0); printf '%s\n' "$1" "${t//0/=}"
printf '%s\n' "$1" "$( perl -e "print '='x${#1}" )"
# quoting $(perl...) isn't needed when we know (all) the chars are =
# but is good practice in general
# note I reverse the more common method of singlequoting a perl script
# with internal strings doublequoted, because I _want_ shell expansion
Нашел! Просто было следующее.Xresources
UXTerm*vt100.scaleHeight: 1.45