Bash 使用While和grep组合-“;意外标记“”附近出现语法错误<'&引用;

Bash 使用While和grep组合-“;意外标记“”附近出现语法错误<'&引用;,bash,while-loop,grep,Bash,While Loop,Grep,我试图将grep的stdout指向while循环中read命令的stdin 下面的代码给出了语法错误-“意外标记附近的语法错误”使用bash shebang运行的将解决此问题。将!/bin/bash(或适当的bash位置!/usr/bin/env bash)作为文件的第一行 如果您需要在sh中执行此操作的方法,以及在请求他人帮助之前更改

我试图将grep的stdout指向while循环中read命令的stdin


下面的代码给出了语法错误-“意外标记附近的语法错误”使用bash shebang运行的
将解决此问题。将
!/bin/bash
(或适当的bash位置
!/usr/bin/env bash
)作为文件的第一行


如果您需要在
sh
中执行此操作的方法,以及在请求他人帮助之前更改
<,您应该运行代码并修复它识别的错误(这将是大量的)。我在运行脚本时遇到了一个精确的错误,它是针对
sh
而不是
bash
。不过,显示静态检查的工具示例应该有一些错误代码。否则,它将如何显示它的功能?:)这与OP的问题在这一点上实际上无关,但shellcheck示例是purpo上的错误代码se@MarcB,这些是字符串,不是heredocs;在ksh或其精神衍生物(包括bash)上,语法是正确的。在一些非常流行的系统(包括MacOS)上可能是
/bin/ksh
/bin/bash
。在不确定的情况下使用
#!/usr/bin/env bash
可能不是个坏主意。啊,是的,而且大多数linux发行版现在都将
/bin
符号链接到
/usr/bin
。谢谢,来到这里解决了同样的问题。
while read -r line ; do
 echo "Processing $line "
 IFS=: read var1 var2 var3 <<< $line
 if [ -n "$(expr match "$var3" '.*\(BEGIN\).*')" ]; then
   echo "Found BEGIN"
   (( var2 += 1 ))
   read -r line1
   IFS=: read var4 var5 var6 <<< $line1
   if [ -n "$(expr match "$var6" '.*\(END\).*')" ]; then
     echo "Found END"
     (( var5 -= 1 ))
     sed -i -e "$var2,$var5 s/# //" -e "$var2,$var5 s%/\* %%" -e "$var2,$var5 s% \*/%%" $var1
   fi
 else
   echo "Found NOTHING"
   sed -i -e "$var2 s%// %%" $var1
 fi
done < <(grep -H -r -n Uncomment *)