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操作系统的问题。将我的键盘布局更改为美国英语使问题消失。