Bash 使用While和grep组合-“;意外标记“”附近出现语法错误<'&引用;
我试图将grep的stdout指向while循环中read命令的stdinBash 使用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中执行此操作的方法,以及在请求他人帮助之前更改
下面的代码给出了语法错误-“意外标记附近的语法错误”使用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 *)