Grep

Grep 等號的 RHS

  • March 4, 2021

我正在進入 /etc/os-release,然後我想將輸出儲存在一個變數中。我製作了一個條件腳本,我不需要一個變數,但現在我需要一個。

[[ ${$(grep ID_LIKE /etc/os-release)#*=} == 'arch' ]] && echo this || echo something

的輸出

grep ID_LIKE /etc/os-release 

看起來像這樣

ID_LIKE=arch 

我想得到等號之後的東西,最有效的方法是什麼?

先感謝您。

根據os-releaseUbuntu ( man os-release)上的手冊, /etc/os-releaseor/usr/lib/os-release文件的格式是這樣的,即它應該由 shell 腳本安全地獲取。獲取時,該文件會創建許多 shell 變數,您想知道其中一個變數的值。

在 shell 腳本中,您可以執行以下操作:

unset ID_LIKE

[ -f /usr/lib/os-release ] && . /usr/lib/os-release
[ -f /etc/os-release     ] && . /etc/os-release

if [ -n "$ID_LIKE" ]; then
   printf 'The ID_LIKE variable has the value "%s"\n' "$ID_LIKE"
else
   echo 'The ID_LIKE variable is empty, or not set' >&2
fi

這會嘗試os-release/usr/lib. /etcin/etc應該覆蓋 in/usr/lib所說的任何內容,因此我們最後獲取它。

然後它列印 shell 變數的值ID_LIKE

我首先添加了對ID_LIKE變數的清除unset,以及對變數值的手動檢查,以檢測兩個文件實際上都沒有設置它的實例。

如果沒有這些額外的花里胡哨,程式碼將讀取

[ -f /usr/lib/os-release ] && . /usr/lib/os-release
[ -f /etc/os-release     ] && . /etc/os-release

printf 'The ID_LIKE variable has the value "%s"\n' "$ID_LIKE"

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