我试图将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 *)
答案 0 :(得分:5)
< <(...)
语法仅适用于ksh
个ksh
扩展名的shell,例如bash
本身或sh
。当我针对#!/bin/ksh
运行代码时,我得到了完全相同的错误。
更新(或添加!)您的shebang为#!/bin/bash
或chown
答案 1 :(得分:1)
使用bash运行shebang将解决此问题。将#!/bin/bash
(或相应的bash位置#!/usr/bin/env bash
)作为文件的第一行。
如果您需要在sh
中执行此操作,并将< <()
更改为<<< "$()"
,将子shell的结果作为字符串输入,我只是测试了这个和它适用于bash
和sh