Bash

使用 GREP 從文件中提取文本並儲存在數組中的 Bash 語法

  • November 4, 2019

我最近從 升級bash 4.2.46bash 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...]

誰能解釋如何解決這種折舊?我嘗試使用sedawk但問題似乎是我的輸出重定向的格式。

文本文件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 重新排列為:

grep -w "${ID}" /etc/passwd

(也引用了變數擴展)。

引用自:https://unix.stackexchange.com/questions/550317