我正在读取文件的第一行,标题行,按分隔符拆分|
并将其分配给数组。
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 ...]
看起来在较低和较高的环境中存在版本差异并导致此问题?有没有其他方法可以将文件的第一行读入带有分隔符拆分的数组?
您的“较低”和“较高”环境中似乎有不同的默认外壳。读入数组的语法在 shell 之间有所不同:
-a
(小写)-A
(大写)您可能在语法工作的“较低”环境中使用 Bash (1),而在“较高”环境中使用 Ksh。将后者的语法更改为
-A
应该可以解决问题。(1)正如 Stéphane Chazelas 所指出的,有一种变体
ksh93
(演变为现已停产的ksh2020
)支持小写-a
选项以提供 Bash 兼容性。因此,您的“较低”和“较高”环境也可能安装了不同的 Ksh 变体。