2017-03-16 68 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