我试图在嵌套while循环中比较 bash 中的两个变量,但遇到问题:
[: 1, : 需要整数表达式。
我的代码:
#!/bin/bash
a="10",b="5"
i="1", j="1"
while [ $i -ne $a ]
do
while [ $j -ne $b ]
do
echo"In Child Loop $j Times"
((j++))
done
j="1"
echo"In Parent Loop $i Times"
((i++))
done
Run Code Online (Sandbox Code Playgroud)
您有两个主要问题。(1)echo你忘记在字符串的开头和开头之间留一个空格, (2)正如所指出的,逗号在 bash 中不是有效的说明符。end of lineBash 使用 asemi-colon作为end of line说明符。这意味着如果您想将 2 个赋值放在同一行上,则必须;在它们之间放置一个 ,而不是,. 经过更改,您的代码是:
#!/bin/bash
a="10"
b="5"
i="1"
j="1"
while [ $i -ne $a ]
do
while [ $j -ne $b ]
do
echo "In Child Loop $j Times"
((j++))
done
j="1"
echo "In Parent Loop $i Times"
((i++))
done
Run Code Online (Sandbox Code Playgroud)
输出:
$ bash nestedtest.sh
In Child Loop 1 Times
In Child Loop 2 Times
In Child Loop 3 Times
In Child Loop 4 Times
In Parent Loop 1 Times
In Child Loop 1 Times
In Child Loop 2 Times
In Child Loop 3 Times
In Child Loop 4 Times
In Parent Loop 2 Times
In Child Loop 1 Times
In Child Loop 2 Times
In Child Loop 3 Times
In Child Loop 4 Times
In Parent Loop 3 Times
In Child Loop 1 Times
In Child Loop 2 Times
In Child Loop 3 Times
In Child Loop 4 Times
In Parent Loop 4 Times
(snip)
Run Code Online (Sandbox Code Playgroud)
此外,由于 bash 没有typed variables,因此变量应该被视为数字还是字符串可能会产生歧义。类型由上下文决定。declare但是,如果您在第一次使用变量之前使用该变量,则可以让 bash 知道您打算如何使用该变量。例如:
declare -i a="10" b="5" i="1" j="1"
Run Code Online (Sandbox Code Playgroud)
注意:在这里,您可以在一行上放置多个声明,只需用空格分隔即可。
此外,如果您收到"[: 1, : integer expression expected"错误。这通常是由于以下两个原因之一造成的。(1)变量尚未定义,或者(2)它不包含数字。避免这种情况的方法是始终确保在测试变量之前对其进行初始化。(你在这里做了,你只是遇到了comma问题)。
最后,虽然对数值没有要求,但对double-quote变量来说是个好主意。这将为您省去很多麻烦。
| 归档时间: |
|
| 查看次数: |
18935 次 |
| 最近记录: |