2017-03-16 61 views
1

我想在bash中粘贴两个剪切块,但是当我尝试在循环中运行时,它会抛出错误Syntax error: "(" unexpected。但是相同的代码正在处理单个文件。谁能帮帮我吗。执行bash代码时出错

这是工作

paste -d, <(cut -d, -f -2 IE3BW0047A_03012017000949.csv) <(rev IE3BW0047A_03012017000949.csv | cut -d, -f -7 | rev) 

,但执行的循环不工作

for filename in *.csv; do 
    paste -d , < (cut -d, -f -2 "$filename") < (rev "$filename" | cut -d, -f -7 | rev) > ${tgt_wd}/"$filename" 
done 
+0

https://www.shellcheck.net – jm666

+1

正如您所指出的,您正在使用'sh',POSIX shell无法识别进程替换。即使你的'/ bin/sh'链接到'bash',它也会将'<(...)'解析为错误的输入重定向,以保持POSIX兼容性。 – chepner

回答

3

应该有进程替换<(之间没有空格:

for filename in *.csv; do 
    paste -d , <(cut -d, -f -2 "$filename") <(rev "$filename" | cut -d, -f -7 | rev) > ${tgt_wd}/"$filename" 
done 
+0

错误依然存在 –

+0

您是否在两个地方都修复了它? – user000001

+0

还有什么想法? –

1

我做它进入tmp文件,它的工作。

#!/bin/bash 

for filename in *.csv; do 
    cut -d, -f -2 "$filename" > 1_"$filename" 
    rev "$filename" | cut -d, -f -7 | rev > 2_"$filename" 
    paste -d, 1_"$filename" 2_"$filename" > "$tgt_dir"/"$filename" 
    rm 1_"$filename" 2_"$filename" 
done