关于Bash未在缺失闭合引号的行报错的原因咨询
关于Bash未在缺失闭合引号的行报错的原因咨询
嗨 Mike,这个问题其实挺典型的,我来给你讲明白为啥会这样~
当你在脚本第2行的echo "this is life后面漏掉了闭合的双引号时,Bash并不会立刻在第2行报错。这是因为Bash遇到未闭合的引号时,会默认你是要写一个跨多行的字符串——这种写法在Bash里是合法的,只要后续能找到匹配的闭合引号就行。
所以它会把第2行之后的所有内容都当成这个未闭合引号里的一部分:第3行的echo "now is the time"会被完全包含进第2行开头的那个引号字符串里,哪怕第3行本身有双引号,也会被Bash当成字符串里的普通字符,而不是用来闭合的符号。
直到Bash读到脚本的最后一行(第4行),发现整个文件都结束了,还是没找到能匹配第2行开头双引号的闭合符号,这时候它才会抛出错误,并且把报错行号标成第4行——因为这是它最终确认“找不到匹配引号”的位置。
你运行脚本后收到的报错:
./test: line 4: unexpected EOF while looking for matching `"`
你的测试脚本:
#!/usr/bin/bash echo "this is life echo "now is the time" echo "have we reached the end"
简单总结下:Bash不会在发现未闭合引号的行立刻报错,因为它允许跨多行的字符串写法;只有当它读到文件末尾都没找到闭合引号时,才会在最后一行抛出EOF相关的错误。
备注:内容来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

