Bash printf与空列

时间:2015-07-08 13:37:52

标签: bash printf

我知道如何使用printf连续包含空格,即当列变量为空时?例如:

printf $GREEN"################################ SOURCED ###############################"$RESET
printf $GREEN'%-1s%-15s%-60s%-1s%s\n' '#'$RESET ' REGION NAME:' $OS_REGION_NAME $GREEN'#'$RESET
printf $GREEN"########################################################################"$RESET

基本上我正在创建一个显示源变量的框。有时一些字段是空的。发生这种情况时,框不应在右侧折叠。我以为我在中间行上的列设置正确地将其设置为正确,但显然如果列为空则忽略宽度。

输出应该如下所示:

################################ SOURCED ###############################
# AUTH URL: blah blah blah                                             #
# REGION NAME: fcdnjcndkjcndkajcndkjcnklcnklsncklsnkcldnslc            #
########################################################################            

但最终看起来像这样

################################ SOURCED ###############################
# AUTH URL: blah blah blah #
# REGION NAME: fcdnjcndkjcndkajcndkjcnklcnklsncklsnkcldnslc #
########################################################################   

解决方案是将变量放在双引号内。这么简单的修复......

printf $GREEN'%-1s%-15s%-55s%-1s%s\n' '#'$RESET ' REGION NAME:' "$OS_REGION_NAME" $GREEN'#'$RESET

$ GREEN和$ RESET用于在剧本的另一部分设置着色。

1 个答案:

答案 0 :(得分:1)

问题是你没有引用$OS_REGION_NAME的扩展,所以当它是空字符串时,printf的整个参数消失了(即printf看到的参数减少了一半它以格式字符串说明符滑动。

话虽如此,我也会以这种方式重写你的行

printf '################################ SOURCED ###############################\n' "$GREEN" "$RESET"
printf '$s%-1s%-15s%-60s%-1s%s\n' "$GREEN" "#$RESET" ' REGION NAME:' "$OS_REGION_NAME" "$GREEN#$RESET"
printf '%s########################################################################%s\n' "$GREEN" "$RESET"