等号の右側をGrepします。

等号の右側をGrepします。

私は/etc/os-releaseを探していて、出力を変数に保存したいと思います。変数を必要としない条件付きスクリプトを作成しましたが、今は変数が必要です。

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

出力

grep ID_LIKE /etc/os-release 

こんな感じ

ID_LIKE=arch 

等号の後に来るものを手に入れたいです。最も効率的な方法は何ですか?

よろしくお願いします。

ベストアンサー1

os-releaseUbuntuのマニュアル()によると、man os-releaseファイル形式はシェルスクリプトを介して安全に取得する必要があります。ソースファイルを取得した後、いくつかのシェル変数が生成され、そのうちの1つの値を知りたいです。/etc/os-release/usr/lib/os-release

シェルスクリプトでは、次のことができます。

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。項目の1つはその中で言及されている/etcものよりも優先されなければならないので、/usr/lib最後に取得します。

次にシェル変数の値を印刷しますID_LIKE

まずID_LIKE、変数の消去を追加し、unset変数の値を手動で確認して、2つのファイルのうちの1つが実際に変数を設定していないインスタンスを検出しました。

これらのアドインがない場合、コードは次のようになります。

[ -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"

おすすめ記事