我最近从 升级bash 4.2.46
到bash version 4.2.50
我有一个脚本:
mapfile -t my_array < <(grep ${ID} -w /etc/passwd | cut -d ":" -f 1,4,5)
其中 ID 是我们想在文件中查找的任意整数passwd
,然后将所有结果加载到数组中。
以前可以工作但现在抛出错误
usage: grep [-r] [-R] [-H] [-L] [-E|-F] [-c|-l|-q] [-insvxbhwyu] [-p[parasep]] -e pattern_list...
[-f pattern_file...] [file...]
usage: grep [-E|-F] [-c|-l|-q] [-insvxbhwyu] [-p[parasep]] [-e pattern_list...]
-f pattern_file... [file...]
谁能解释如何解决这种折旧?我尝试使用sed
,awk
但问题似乎是我的输出重定向的格式。
文本文件passwd
看起来像这样
name:garbageData:garbageData:ID:password
如果您使用 ksh 而不是 bash 执行脚本,则会出现该错误;sh-bang 标题行错误地指向 ksh,或者它指向 /bin/sh,它是 AIX 上的 ksh,或者您明确地将其称为
ksh /the/script
.ksh 不支持
mapfile
也不支持 ksh93t+ 之前的版本,当用作重定向目标时<( ...)
的进程替换语法,例如. 由Stéphane Chazelas提供的澄清。<
修复 sh-bang 行以调用 bash(或显式调用 bash 而不是 ksh,如果是这种情况)。
此外,该
grep
命令正在抱怨,因为您在所有选项之前都添加了一个参数;将 grep 重新排列为:(也引用了变量扩展)。