评论让我很困惑:bash shell脚本noob的自白

评论让我很困惑:bash shell脚本noob的自白,bash,shell,comments,Bash,Shell,Comments,当我运行此命令时: #!/usr/bin/env bash check_foo () { if [ -n "$foo" ]; then echo "foo exists: $foo" echo "" else echo "no foo" echo "" fi } echo "foo=" foo= check_foo echo "foo=#wtf" foo=#wtf check_foo echo "fo

当我运行此命令时:

#!/usr/bin/env bash

check_foo () {
    if [ -n "$foo" ];
    then
      echo "foo exists: $foo" 
      echo ""
    else 
      echo "no foo"
      echo ""
    fi
} 


echo "foo="
foo=
check_foo

echo "foo=#wtf"
foo=#wtf
check_foo

echo "foo=# wtf"
foo=# wtf
check_foo

echo "foo= #wtf"
foo= #wtf
check_foo

echo 'foo="wtf"'
foo="wtf"
check_foo

echo 'foo=#"wtf"'
foo=#"wtf"
check_foo

echo 'foo=# "wtf"'
foo=# "wtf"
check_foo

echo 'foo= # "wtf"'
foo= # "wtf"
check_foo
我得到这个输出:

foo=
no foo

foo=#wtf
foo exists: #wtf

foo=# wtf
./wtf.sh: line 24: wtf: command not found
foo exists: #wtf

foo= #wtf
no foo

foo="wtf"
foo exists: wtf

foo=#"wtf"
foo exists: #wtf

foo=# "wtf"
./wtf.sh: line 40: wtf: command not found
foo exists: #wtf

foo= # "wtf"
no foo
我希望shell在“#”之后停止读取。有人能解释一下吗

编辑


我应该更仔细地表达我的问题。我理解正在发生的事情。我不明白的是,你为什么想要这样的评论。这种行为有什么好处吗?或者它只是shell处理参数方式的产物?

不,这不是真的。要使任何一行成为注释,
#
必须位于行开始处或仅在一行上的一些空格之后

因此,例如,这将不是shell中的注释和有效变量赋值:

s=#123
echo "$s"
#123

对另外,请注意,在例如
foo=#wtf
中,空格被用作赋值与其应用的命令之间的分隔符——也就是说,它尝试执行命令
wtf
,foo设置为“#”,这会失败,因为
wtf
不是有效的命令。是的,这是正确的,感谢@GordonDavisson对此的澄清。