PHL*_*LAK 40 printing variables bash formatting printf
我在一个带有变量的bash脚本中回显一些文本,并且想要填充该变量,以便它总是在右边有适当的空格,以保持文本的其余部分对齐.
这是我想要的一个例子:
Echoing random number 1080 [ OK ]
Echoing random number 443 [ OK ]
Echoing random number 34842 [ OK ]
Run Code Online (Sandbox Code Playgroud)
数值的长度可以变化(可能不超过5或6位).
我知道printf可以执行此操作并通过执行以下操作右对齐变量:
printf "Echoing random number %5s [ OK ]" $RAND_NUM
Run Code Online (Sandbox Code Playgroud)
但是,这会格式化文本,如下所示:
Echoing random number 1080 [ OK ]
Echoing random number 443 [ OK ]
Echoing random number 34842 [ OK ]
Run Code Online (Sandbox Code Playgroud)
当然只是用空格回声并不起作用:
echo "Echoing random number ${RAND_NUM} [ OK ]"
Run Code Online (Sandbox Code Playgroud)
产生这个:
Echoing random number 1080 [ OK ]
Echoing random number 443 [ OK ]
Echoing random number 34842 [ OK ]
Run Code Online (Sandbox Code Playgroud)
有没有办法像我的第一个例子那样打印文本?
Joh*_*ica 56
使用-左对齐的字段.
printf "Echoing random number %-5s [ OK ]" $RAND_NUM
Run Code Online (Sandbox Code Playgroud)
或者,如果您使用的是Red Hat Linux系统,则预定义的功能将打印出绿色OK和红色FAILED提示(您在启动时看到的提示):
#!/bin/bash
. /etc/init.d/functions
echo -n "Frobbing widget:"
frob_widget && echo_success || echo_failure
echo
Run Code Online (Sandbox Code Playgroud)
sob*_*3ch 13
将所有行收集在一个 var 或文本文件中,然后通过column命令进行管道传输。所以这个(我的示例文件/tmp/columns.txt)
Echoing random number 1080 [ OK ]
Echoing random number 44332356 [ OK ]
Echoing random number 34842 [ OK ]
Echoing random number 342 [ OK ]
Run Code Online (Sandbox Code Playgroud)
变成了这个
Echoing random number 1080 [ OK ]
Echoing random number 44332356 [ OK ]
Echoing random number 34842 [ OK ]
Echoing random number 342 [ OK ]
Run Code Online (Sandbox Code Playgroud)
示例命令: cat /tmp/columns.txt | column -t
扩展 sobi3ch 的答案:如果您使用分隔符连接字符串(我使用 tilda (~)),则可以使用 -s 参数调用 column 来在该点拆分文本。
对虐待猫的行为致歉:
foo.txt :
Echoing random number 1080~[ OK ]
Echoing random number 1080~[ OK ]
Echoing random number 1080~[ Failed ]
Run Code Online (Sandbox Code Playgroud)
然后 :
cat foo.txt | column -s'~'
Echoing random number 1080 [ OK ]
Echoing random number 1080 [ OK ]
Echoing random number 1080 [ Failed ]
Run Code Online (Sandbox Code Playgroud)