如何在 Bash 中对齐字符串变量

如何在 Bash 中对齐字符串变量

我正在尝试在 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 个字符)。

这里bashprintf内置命令支持-v将结果存储printf到变量中,但即使不支持,您也可以使用命令替换:

str2=$(printf %8s "$str1")

相关内容