使用While和grep组合 - “意外令牌附近的语法错误”<' “

时间:2016-06-17 21:00:23

标签: bash while-loop grep

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

以下代码给出了语法错误 - “意外令牌附近的语法错误”<' “

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 *)

2 个答案:

答案 0 :(得分:5)

< <(...)语法仅适用于kshksh扩展名的shell,例如bash本身或sh。当我针对#!/bin/ksh运行代码时,我得到了完全相同的错误。

更新(或添加!)您的shebang为#!/bin/bashchown

答案 1 :(得分:1)

使用bash运行shebang将解决此问题。将#!/bin/bash(或相应的bash位置#!/usr/bin/env bash)作为文件的第一行。

如果您需要在sh中执行此操作,并将< <()更改为<<< "$()",将子shell的结果作为字符串输入,我只是测试了这个和它适用于bashsh