我最近从升级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,或者指向AIX上为ksh的/ bin / sh,或者您将其显式调用为ksh /the/script
。
ksh不支持mapfile
ksh93t +之前的版本,也不支持ksh93t +之前的版本(用作重定向的目标时使用<( ...)
进程替换语法),例如。StéphaneChazelas提供的澄清说明。<
修复sh-bang行以调用bash(如果是这种情况,则明确调用bash而不是ksh)。
另外,该grep
命令在抱怨,因为您在所有选项之前都加上了一个参数。将grep重新排列为:
grep -w "${ID}" /etc/passwd
(还引用了变量扩展)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句