gpt4 book ai didi

bash - 如何检查 bash for 循环中的不平等?

转载 作者:行者123 更新时间:2023-12-02 16:54:17 25 4
gpt4 key购买 nike

我在 bash 脚本中有以下 for 循环:

for (( j = i; ${1:j:3} != "   "; j=j + 1 ))
do
sleep 0.1
done
printf '%s' "${letter[${1:i:j}]}"
i=$j

运行时,会导致以下错误的无限循环:

/home/com/morsecoder.sh: line 188: letter: bad array subscript
/home/com/morsecoder.sh: line 184: ((: ... != : syntax error: operand expected (error token is "... != ")

问题在第一行;错误的数组下标错误几乎可以肯定是它的副产品。

我可以看出错误是由我的 ${1:j:3} != "" 引起的。基本上,我需要的是让循环遍历字符串中的字符,直到找到三个连续的空格。该字符串包含摩尔斯电码,每个字母由3个字符分隔(因为在美式摩尔斯中,字母可以包含0、1或2个空格,所以3是最小的字母分隔符)。

然后,我将检测到的完整摩尔斯字母转换为英文并打印出来,然后继续处理下一个摩尔斯字符。

printf 部分似乎工作正常,但这里的错误让我感到困惑。我检查了一下,我正在正确使用 (()) 以及 != 来检查不等式。我还尝试将 ${1:j:3} 括在引号中,但没有任何作用。我怎样才能改写 for 循环,这样我就不会收到关于无效语法的错误?

最佳答案

这种形式的for 循环用于算术运算。您需要改用 while 循环:

j=$i
while [[ ${1:j:3} != " " ]]; do
sleep 0.1
j=$((j+1))
done

关于bash - 如何检查 bash for 循环中的不平等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57114242/

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