sh: 意外标记“<”附近的语法错误

sh: syntax error near unexpected token `<'

我正在创建一个脚本,我将 awk 命令的输出重定向到一个循环中,但它给了我这个错误:

sh: -c: line 3: syntax error near unexpected token `<'
sh: -c: line 3: `done < <(awk "{print}" inputfile.txt)'

我能够 运行 它针对不同的远程主机,但是这台主机给我一个错误。有谁知道 sh/bash 的某些版本是否不支持该语法,或者知道该语法的任何替代方法,或者可能发现我无法看到的错误? (我是 bash 脚本编写的新手,所以即使方向正确也会有所帮助!)

这是我的脚本的简化版本,我能够在上面重现该问题:

#!/usr/bin/env bash

host=

ssh $host 'while read line
do
echo "hi";
done < <(awk "{print}" inputfile.txt)'

看起来该主机上的远程用户使用的 shell 不是 Bash 到 运行 命令,参见 this Q&A;一种解决方法是避免 Bashisms:

ssh "$host" 'awk "{print}" inputfile.txt \
    | while IFS= read -r line; do
        echo "$line"
    done'

它有自己的缺陷,请参阅 A variable modified inside a while loop is not remembered – 或者,您可以指定远程主机应该 运行 Bash:

ssh "$host" <<'EOF'
bash -c 'while IFS= read -r line; do
    echo "$line"
done < <(awk "{print}" inputfile.txt)'
EOF