在 Bash 脚本中使用 while 循环时出错

在 Bash 脚本中使用 while 循环时出错

2: [: missing ]使用以下循环时出现错误while

#!/bin/sh
while ["$INPUT_STRING" != "bye"]
do
  echo "please type something (bye quits) "
  read INPUT_STRING
  echo "you tuped : $INPUT_STRING "
done

答案1

您需要在while的条件周围添加空格:

while [ "$INPUT_STRING" != "bye" ]

对于有编程背景的人来说这可能看起来有点奇怪,但原因如下:

  1. while需要命令列表。控制流取决于此命令的退出状态:只要退出状态为零,则命令主体将继续执行。

  2. [ expression ]是 的另一种形式test expression。这里,test是一个命令,它计算表达式的值并以命令的退出状态的形式返回其值。如果表达式(逻辑上)计算为布尔值,则确保返回退出状态零,以便它可以在和命令true中使用。ifwhile

  3. 事实上,test[都是 Linux 中的可执行文件(通常位于/usr/bin)。但是,某些 shell(例如bash)使用同名的内部命令。

  4. 由于test[在技术上是简单命令,它们的参数应该用一个或多个白色字符与命令名称分开。

相关内容