我想从数组中显示一长串字符串.
现在,我的脚本通过for循环运行,将每个值回显到标准输出:
for value in ${values[@]}
do
echo $value
done
Run Code Online (Sandbox Code Playgroud)
是的,那太丑了!一栏列表也很长......
我想知道我是否可以找到一个命令或内置帮助我在列中显示所有这些值,就像ls在列出目录时默认命令一样(ls -C).
[更新]
在column没有显示格式正确的列的情况下失去了我的大脑,这里有更多信息:
值:( $ values=( 01----7 02----7 03-----8 04----7 05-----8 06-----8 07-----8 08-----8 09---6 10----7 11----7 12----7 13----7 14-----8 15-----8 16----7 17----7 18---6 19-----8 20-----8 21-----8) 注意前两位数字作为索引,最后一位数字表示字符串长度以便于阅读)
命令: echo " ${values[@]/%/$'\n'}" | column
结果:坏列http://tychostudios.ch/multipurpose/bad_columns.png
出了点问题......
Joh*_*web 18
你可以输出你的输出column.
column 似乎很难解决单列输入中的某些数据比tabstop(8个字符)更窄的问题.
printf在for-loop中使用将值填充到8个字符似乎可以解决问题:
for value in "${values[@]}"; do
printf "%-8s\n" "${value}"
done | column
Run Code Online (Sandbox Code Playgroud)
以下是一些可以与Johnsyweb 的答案一起使用的技术,这样您就可以在没有循环的情况下进行输出:
saveIFS=$IFS
IFS=$'\n'
echo "${values[*]}" | column
IFS=$saveIFS
Run Code Online (Sandbox Code Playgroud)
或者
echo " ${arr[@]/%/$'\n'}" | column
Run Code Online (Sandbox Code Playgroud)
或者
echo " ${arr[@]/%/$'\n'}" | sed 's/^ //' | column
Run Code Online (Sandbox Code Playgroud)