如何在BASH中的列中输出数组的内容

Ark*_*rko 10 arrays bash list

我想从数组中显示一长串字符串.

现在,我的脚本通过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)

  • +1正确!用于列式输出的`column`和用于行式输出的`column-column`. (2认同)

Pau*_*ce. 5

以下是一些可以与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)