gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 10:50:06 24 4
gpt4 key购买 nike

我正在尝试从单词中拆分字母并使用以下方法在新行中打印它们。但是我无法为变量赋值。如果我在这里遗漏了任何基本规则,请纠正我。

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

我的方法有什么问题,我该如何修正我的变量赋值?

最佳答案

看起来您正在尝试使用 $i 动态创建变量名。首先,如果可能的话,我建议不要这样做——如果你的 shell 支持它,最好使用数组。但是,可以使用 eval 来完成:

eval x$i=$( ... )

使用 eval$i 在赋值发生之前展开。

使用 bash,还有 declare,您可以使用它代替 eval。它理应享有比 eval 更好的声誉,因为它更安全。但是,如果您使用的是 bash,则可以(并且应该)改用数组:

x=() # before the loop
x[i]=$( ... )

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

x=$( ... )

关于linux - 在 shell 脚本中为 for 循环中的变量赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31336506/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com