根据分隔符读取第一行分割并将其存储在数组中(在 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

看来您在“较低”和“较高”环境中有不同的默认外壳。读入数组的语法在 shell 之间有所不同:

  • 对于 Bash (1),相关选项是-a(小写)
  • 对于 Ksh,相关选项是-A(大写)

语法工作的“较低”环境很可能使用 Bash (1),而在“较高”环境中使用 Ksh 。更改后者的语法应该-A可以解决问题。


(1)正如 Stéphane Chazelas 所指出的,有一个的变体ksh93(现已演变为现已停产的ksh2020),支持小写-a选项以提供 Bash 兼容性。因此,您的“较低”和“较高”环境也可能安装了不同的 Ksh 变体。

相关内容