在shell脚本中为for循环中的变量赋值

时间:2015-07-10 08:56:09

标签: linux shell unix for-loop scripting

我正在尝试从单词中分割字母并使用以下方法将它们打印在换行符中。但我无法为变量赋值。如果我在这里缺少任何基本规则,请纠正我。

stringOneLength=$(echo `expr length $1`)
echo $stringOneLength
stringTwoLength=$(echo `expr length $2`)

echo $stringTwoLength


for ((i=1; i<=$stringTwoLength; i++)) ;
do
    x$i=$(echo "$1" | sed 's/\(.\{1\}\)/\1 /g' | sed 's/\(.\{1\}\)/\1 /g' |awk '{print $i}')

    echo x$i
done

获取以下错误:

sh FileName one two
3
3
samp: line 13: x1=o: command not found
x1
samp: line 13: x2=o: command not found
x2
samp: line 13: x3=o: command not found
x3

我的方法出了什么问题?如何修复变量赋值?

1 个答案:

答案 0 :(得分:1)

您似乎正在尝试使用$i动态创建变量名称。首先,如果可能的话,我会建议不要这样做 - 如果你的shell支持它,最好使用数组。但是,可以使用eval

完成
eval x$i=$( ... )

使用eval$i会在分配之前展开。

使用bash,还有declare,您可以使用eval代替eval。它应该比x=() # before the loop x[i]=$( ... ) 具有更好的声誉,因为它更安全。但是,如果您正在使用bash,则可以(并且应该)使用数组:

$i

还值得一提的是,如果您实际上并不需要单独存储每个值(即您以后不打算使用它们),则可以删除{{1完全在循环中做一个简单的赋值:

x=$( ... )