将文件的内容(带空格)读入数组

时间:2010-03-05 18:50:54

标签: arrays shell

我正在创建一个Shell脚本,我有一个名为expressions.txt的文件:

"Ploink Poink"
"I Need Oil"
"Some Bytes are Missing!"
"Poink Poink"
"Piiiip Beeeep!!"
"Whoops! I'm out of memory!"
"1 + 1 = 3"
"Please fix my bugs!"
"Goeiedag!"
"Hallo!"
"Guten Tag!"
"Hyvää Päivää!"
"Добрый день"
"!สวัสดี"
"Bonjour!"
"!مرحبا"
"!שלום"
"Γειά!"

我在robot.sh中有这段代码:

expressions=( $(cat expressions.txt) )

# Get random expression...
selectedexpression=${expressions[$RANDOM % ${#expressions[@]}]}

# Write to Shell
echo $selectedexpression

但是,这会按空格而不是引号来分割文件的内容,因此输出可能类似于"PloinkNeedfix。但我想要完整的句子。有没有办法做到这一点?感谢

哦,我使用的shell是#!/bin/sh

2 个答案:

答案 0 :(得分:2)

这适用于bash,可能与sh

一起使用
OLDIFS="$IFS"
IFS=$'\n'
expressions=()
while read line
do
  expressions=("${expressions[@]}" "$line")
done < expressions.txt
IFS="$OLDIFS"

答案 1 :(得分:0)

在Solaris上使用(g)awk或nawk

awk 'BEGIN{srand() }
{
  lines[++d]=$0    
}END{
  RANDOM = int(1 + rand() * d)
  print lines[RANDOM]
}' expression.txt