Bash-printf中的默认大小
我正在编写一个脚本,将终端中的每个进程pid、ppid、用户、组、cwdir等列在一个表中。 当以非root用户身份执行时,脚本不会获得一些值,因此它必须在表中打印空白,但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
> 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”保留为空,而不是一起删除