Grep
Grep 等號的 RHS
我正在進入 /etc/os-release,然後我想將輸出儲存在一個變數中。我製作了一個條件腳本,我不需要一個變數,但現在我需要一個。
[[ ${$(grep ID_LIKE /etc/os-release)#*=} == 'arch' ]] && echo this || echo something
的輸出
grep ID_LIKE /etc/os-release
看起來像這樣
ID_LIKE=arch
我想得到等號之後的東西,最有效的方法是什麼?
先感謝您。
根據
os-release
Ubuntu (man os-release
)上的手冊,/etc/os-release
or/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
./etc
in/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"