Unix ksh循环并将结果放入变量

时间:2010-02-23 15:34:24

标签: unix shell

我有一件简单的事情要做,但我是UNIX的新手。 所以,我有一个文件,每行都有一个ID。 我需要浏览文件并将所有ID放入一个变量中。

我尝试过类似Java的东西,但是没有用。

for variable in `cat myFile.txt`
do
    param=`echo "${param} ${variable}"`
done 

似乎没有将所有值添加到param中。

感谢。

4 个答案:

答案 0 :(得分:2)

我会用:

param=$(<myFile.txt)

参数在名称之间有空格(实际上是换行符)。当使用不带引号时,shell会将这些扩展为空格,如:

cat $param

如果与引号一起使用,文件名将保留在单独的行中,如:

echo "$param"

请注意,Korn shell特殊情况下使用“$(<file)”表示法,并且不会分叉并执行任何命令。

另请注意,您的原创想法可以更简单地工作:

param=
for variable in `cat myFile.txt`
do
    param="${param} ${variable}"
done

这在参数的前面引入了一个空白;它很少重要。有趣的是,您可以使用param="${param}${variable} "在末尾使用一个空格来避免前面的空白。这也可以在不搞乱的情况下工作,尽管它看起来好像是把东西混在一起。此外,“${var}”符号不是必需的,但它也没有任何害处。

最后,现在最好用'$(cat myFile.txt)'替换back-tick命令。当您需要嵌套命令时,差异变得至关重要:

perllib=$(dirname $(dirname $(which perl)))/lib

VS

perllib=`dirname \`dirname \\\`which perl\\\`\``/lib

我知道我更喜欢输入(和阅读)!

答案 1 :(得分:0)

试试这个:

param=`cat myFile.txt | tr '\n' ' '`

tr命令tr将所有出现的\n(换行符号)转换为空格。然后我们将结果分配给param变量。

可爱。

答案 2 :(得分:0)

AWK

var=$(awk '1' ORS=" " file)

ksh的

 while read -r line
 do
   t="$t $line"
 done < file
 echo $t

答案 3 :(得分:0)

param="$(< myFile.txt)"

while read line
do
    param="$param$line"$'\n'
done < myFile.txt