我有一个文件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"
(空格分隔)。
此列表应由脚本动态分配。我怎么能这样做?
答案 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
注意:使用引用的变量(双引号),否则可能会丢失空格。