我知道如何使用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用于在剧本的另一部分设置着色。
答案 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"