我正在读取文件的第一行,标题行,按分隔符分隔|
并将其分配给数组。
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 变体。