当我运行时:
#!/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处理参数的方式的工件?
答案 0 :(得分:1)
不,那不是真的。对于任何要成为注释的行,#
需要在行开始时或在一行上只有一些空格后。
因此,例如,这不是shell中的注释和有效变量赋值:
s=#123
echo "$s"
#123