1. ホーム
  2. bash

[解決済み] 予期しないトークン `<' 付近の構文エラー

2022-03-04 19:38:22

質問

StudentAnwser=()
inputScriptFile=001.sh

while IFS= read -r line;
do
    StudentAnwser+=( "$line" )
done < <( sh $inputScriptFile test.txt )

エラーを返します。

foo.sh: line 22: syntax error near unexpected token `<'
foo.sh: line 22: `  done < <( sh $inputScriptFile test.txt )'

何が問題なのでしょうか?私は結果から行を読み取るための他の質問からの解決策に従ってください。

どのように解決するのですか?

エラーが発生した理由 処理代入 (その <(some command) の部分)は、標準機能(POSIXで定義されている)ではなく sh つまり、あるOSでは動作するが、他のOSでは動作しない、あるいは同じOSでも設定が異なると動作しない可能性があることを意味します。

ということを明確にされましたが #!/bin/bash をスクリプトの先頭にしていますが、スクリプトの実行はやはり sh foo.sh というように。 #!/bin/bash は無視され、スクリプトが解釈されるのは sh .

あなたのデフォルトのシェルは bash (実行 echo $SHELL )なので、ターミナルにスクリプトを貼り付けて実行すれば、すべての問題は解決します。

更新 ========================================================

私の推測が正しければ、考えられる解決策。

去る #!/bin/bash をそのままにして、スクリプトを実行可能な状態にします。 chmod +x foo.sh . そして、それを直接 ./foo.sh