区切り文字に基づいて分割された最初の行を読み取り、配列(ksh)に保存します。

区切り文字に基づいて分割された最初の行を読み取り、配列(ksh)に保存します。

ファイルの最初の行であるヘッダー行を区切り文字で区切って配列に|割り当てます。

IFS='|' read -r -a header < "/file_uploads/file_headers.txt"

低い環境ではうまく機能しますが、高い環境では同様のエラーが発生します。

file_upload_process.sh[47]: read: -a: unknown option
Usage: read [-ACprsSv] [-d delim] [-u fd] [-t timeout] [-n count] [-N count]
            [var?prompt] [var ...]
file_upload_process.sh[48]: read: -a: unknown option
Usage: read [-ACprsSv] [-d delim] [-u fd] [-t timeout] [-n count] [-N count]
            [var?prompt] [var ...]

低い環境と高い環境のバージョンの違いがあり、この問題が発生していると思いますか?区切り文字分割を使用してファイルの最初の行を配列として読み取る別の方法はありますか?

答え1

「低」環境と「高」環境に異なる基本シェルがあるようです。配列を読み取る構文はシェルによって異なります。

  • Bash (1)の場合、関連オプションは-a(小文字)です。
  • Kshの場合、関連オプションは-A(大文字)です。

構文が機能する「低」環境では Bash (1) を使用し、「高」環境では Ksh を使用します。後者の構文を変更すると-A問題が解決します。


(1) Stéphane Chazelasが指摘したように変形ksh93(現在は廃止に進化) Bash互換性を提供するためにksh2020小文字のオプションをサポートしています。-aしたがって、「低」環境と「高」環境には異なるKshバリアントがインストールされている可能性があります。

関連情報