Bash-printf中的默认大小

Bash-printf中的默认大小,bash,Bash,我正在编写一个脚本,将终端中的每个进程pid、ppid、用户、组、cwdir等列在一个表中。 当以非root用户身份执行时,脚本不会获得一些值,因此它必须在表中打印空白,但printf没有这样做: > foo=foo > bar= > printf "%3.3s$3.3s end\n" $bar $foo 所以我想得到这样的东西 foo end 但我明白了 foo end 这就像它在最右边切换空白一样 我做错了什么?因为bash解释命令行的方式,任何可能(a

我正在编写一个脚本,将终端中的每个进程pid、ppid、用户、组、cwdir等列在一个表中。 当以非root用户身份执行时,脚本不会获得一些值,因此它必须在表中打印空白,但printf没有这样做:

> foo=foo
> bar=

> printf "%3.3s$3.3s end\n" $bar $foo
所以我想得到这样的东西

   foo end
但我明白了

foo    end
这就像它在最右边切换空白一样


我做错了什么?

因为
bash
解释命令行的方式,任何可能(a)为空或(b)包含空格的参数都需要双引号。尝试:

$ printf "%3s%3s end\n" "$bar" "$foo"
   foo end
解释 如果没有双引号,空壳变量不会保留为空参数;它只是从命令行中删除。例如,考虑:

$ printf "%3s%3s end\n" $bar $foo
foo    end
如果
bar
为空,则上述内容相当于:

$ printf "%3s%3s end\n" $foo
foo    end
通过添加双引号,
bash
将“$bar”保留为空,而不是一起删除