for循环内的linux bash if语句

for循环内的linux bash if语句

我正在尝试迭代 1-30,除了数字 10 之外,对每个数字打个招呼。这是我所拥有的,但不起作用

for i in {1..30}; do if [i != 10]; then echo "hello $i"; fi; done

我的输出是 bash [i: command not found -- 三十次

答案1

你的if说法是错误的,应该是if [ $i != 10 ]。周围的空格[是强制性的,如果您正在阅读变量,则变量$前面应该有一个符号。

for i in {1..30}; do if [ $i != 10 ]; then echo "hello $i"; fi; done

答案2

if测试命令。 if [ ... ]之所以有效,是因为[ 它是一个命令(/usr/bin/[或一个内置命令(通常是后者)),它期望]作为它的最后一个参数(只是为了让事情看起来很漂亮)。但除此之外,它还需要参数,这些参数需要像往常一样以空格分隔的列表形式传递。

如果你不想使用[,你可以这样做: if test $i != 10; then它的行为完全相同。

[[或者,有巴什,这是一个正确的语法结构,它创建了一个单独的上下文,它允许您在其中使用类似>或 的内容&&,其语义不同于它们在通常的命令调用中的含义([并且test只是命令调用),但您仍然需要空格[[]]

相关内容