为变量分配数字列表

时间:2015-06-17 06:02:59

标签: bash shell unix

我有一个文件test.txt中的数字列表:

31
32
26
28
27
30
24
15
4
2
1
3

我想将此列表分配给脚本中的变量,该变量可用作FOR循环的循环变量。该变量应该像这样分配: LIST="31 32 26 28 27 30 24 15 4 2 1 3"(空格分隔)。 此列表应由脚本动态分配。我怎么能这样做?

5 个答案:

答案 0 :(得分:4)

在Bash中,您可以使用:

list=$(<test.txt)

这使用command substitution的表示法,但避免了执行外部程序的开销。非Bash替代方案是:

list=$(cat test.txt)

当然,这也适用于Bash,但会产生单独的cat进程的开销。

您可以使用反引号list=`cat test.txt`,但通常应使用$(…)表示法。使用$(…)表示法处理引用和嵌套要比使用反引号更容易。

答案 1 :(得分:1)

while read -r line; do
  echo "$line";
done < test.txt

for line in $(cat test.txt); do
  echo "$line"
done

答案 2 :(得分:1)

LIST=`tr  '\n' ' '   < test.txt` 
echo $LIST

答案 3 :(得分:0)

var=`cat test.txt`

......这就是你所需要的一切。然后,您可以在for循环中迭代$var

如果你特别需要一个以空格分隔的字符串,echo $var会给你这个。

答案 4 :(得分:0)

有几种方法:

#!/bin/bash
LIST="$(tr -s '\n' ' ' <<< "$(<file)")"
#LIST="$(tr -s '\n' ' ' <<< "$(cat file)")"
#LIST="$(cat file |tr -s '\n' ' ')"
#LIST="$(echo "$(<file)" |tr -s '\n' ' ')"
#LIST="$(tr -s '\n' ' ' <file)"
LIST="${LIST/% /}" #trims the space at end
printf "%s" "$LIST"

命令tr -s '\n' ' '用一个空格替换换行符。最后在$LIST中添加了一个空格,LIST=${LIST/% /}

省略了该空格

另一种方式:

LIST="$(echo $(<file))" # $(<file) must not be quoted here
printf "%s" $LIST  # Use quote as normal, $LIST without quote will lose spaces

注意:使用引用的变量(双引号),否则可能会丢失空格。