如何使用脚本shell在同一行上显示多个元素?

时间:2016-09-30 14:56:34

标签: shell

我有一个元素数组,我想在同一行显示数组的所有元素:

i=0
while read line
do 
    array[$i]= echo $line | tr '[A-Z]' '.'
    ((i+=1))
done

k=0
while [ $k -lt $i ]
do

    printf '%s '  ${array[$k]}
    ((k+=1))
done

这个程序的结果给我一个换行符上的每个元素。如何在同一行上用空格分隔所有元素?

2 个答案:

答案 0 :(得分:0)

听起来你可以使用tr来处理所有事情。

tr A-Z . | tr '\n' ' '

如果你没有重新排序数组,那么将这些行读入数组是没有意义的。

另请注意tr如何读取正则表达式参数,只读取两个字符范围列表。

如果您想保留最后一个换行符,请使用管道将其恢复为sed

... | sed 's/ $/\n/'

(在sed脚本中包含换行符号的表示法并不完全可移植,但我相信这应该适用于任何合理的现代平台。)

这些基本管道应该适用于任何shell。你的内容根本不像csh脚本。 printf应该这样工作,但是你没有正确地初始化数组(如果是的话,循环将是多余的)。

答案 1 :(得分:0)

如果您使用的是bash 4或更高版本,则可以在两行中填充数组,而无需外部命令:

readarray -t array
array=("${array[@]//[A-Z]/.}")

在早期版本的bash中,您仍然需要循环:

while IFS= read -r line; do
  array+=( "${line//[A-Z]/.}" )
done

在任何一种情况下,您都可以使用

在一行上打印数组的元素
printf '%s\n' "${array[*]}"