Bash 为一行添加可变数量的前缀空格
Bash prefix variable number of spaces to a line
我想在 Bash 中创建如下所示的文本输出:
abc - Line 1
Line 2
Line 3
我正在使用以下代码来尝试执行此操作,但它不起作用
var=¨abc¨
printf ¨%s - %s\n¨ var ¨Line 1¨
printf ¨%*s %s\n¨ ${#var} ¨¨ ¨Line 2¨
printf ¨%*s %s\n¨ ${#var} ¨¨ ¨Line 3¨
我得到的结果如下所示:
$ ./test1
¨-¨%s¨n¨¨¨¨abc¨¨¨¨Line¨1¨./test1: line 3: printf: %sn¨: invalid number
./test1: line 3: printf: ¨¨: invalid number
./test1: line 3: printf: 2¨: invalid number
¨5¨¨Line¨ ./test1: line 4: printf: %sn¨: invalid number
./test1: line 4: printf: ¨¨: invalid number
./test1: line 4: printf: 3¨: invalid number
¨5¨¨Line¨
谁能看出我做错了什么?
显然是引用问题。双引号是 "
而不是 ¨
。这可能是由于使用了键盘“ENG INTL”或“US International”。我建议将它放在一个简单的“美国”键盘上,这样可以去掉所有变音符号。如果您需要变音符号,请实现一个组合键。
其余的,忽略错误的引号,您的解决方案接近正确。 %*s
仍然需要一个你没有提供的字符串,所以解决方案是:
printf "%s - %s\n" "${var}" "Line1"
printf "%*s %s\n" "${#var}" "" "Line2"
printf "%*s %s\n" "${#var}" "" "Line3"
原来这要么是键盘驱动的问题,要么是Ubuntu操作系统的问题。将我的键盘布局更改为美国英语使问题消失。
我想在 Bash 中创建如下所示的文本输出:
abc - Line 1
Line 2
Line 3
我正在使用以下代码来尝试执行此操作,但它不起作用
var=¨abc¨
printf ¨%s - %s\n¨ var ¨Line 1¨
printf ¨%*s %s\n¨ ${#var} ¨¨ ¨Line 2¨
printf ¨%*s %s\n¨ ${#var} ¨¨ ¨Line 3¨
我得到的结果如下所示:
$ ./test1
¨-¨%s¨n¨¨¨¨abc¨¨¨¨Line¨1¨./test1: line 3: printf: %sn¨: invalid number
./test1: line 3: printf: ¨¨: invalid number
./test1: line 3: printf: 2¨: invalid number
¨5¨¨Line¨ ./test1: line 4: printf: %sn¨: invalid number
./test1: line 4: printf: ¨¨: invalid number
./test1: line 4: printf: 3¨: invalid number
¨5¨¨Line¨
谁能看出我做错了什么?
显然是引用问题。双引号是 "
而不是 ¨
。这可能是由于使用了键盘“ENG INTL”或“US International”。我建议将它放在一个简单的“美国”键盘上,这样可以去掉所有变音符号。如果您需要变音符号,请实现一个组合键。
其余的,忽略错误的引号,您的解决方案接近正确。 %*s
仍然需要一个你没有提供的字符串,所以解决方案是:
printf "%s - %s\n" "${var}" "Line1"
printf "%*s %s\n" "${#var}" "" "Line2"
printf "%*s %s\n" "${#var}" "" "Line3"
原来这要么是键盘驱动的问题,要么是Ubuntu操作系统的问题。将我的键盘布局更改为美国英语使问题消失。