我正在尝试在 Bash 中对齐字符串变量。这是期望的行为。
if str1="123" , then str2=" 123"
if str1="1234" , then str2=" 1234"
if str1="12345", then str2=" 12345"
我已经了解了如何使用 printf 进行打印,但我需要在变量内部执行此操作而不将其打印出来。
答案1
假设变量仅包含单字节、单宽字符:
printf -v str2 %8s "$str1"
如果它们可能包含多字节(但仍然是单宽)字符,您可以这样做:
printf -v str2 %8s%s '' "$str1"
str2=${str2: -8}
(但请注意,那个截断值大于 8 个字符)。
这里bash
的printf
内置命令支持-v
将结果存储printf
到变量中,但即使不支持,您也可以使用命令替换:
str2=$(printf %8s "$str1")