我正在尝试迭代 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
只是命令调用),但您仍然需要空格[[
和]]
。