등호 오른쪽을 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-release우분투 매뉴얼( ) 에 따르면 man os-release파일 형식은 쉘 스크립트를 통해 안전하게 얻어야 한다. 소스 파일을 얻은 후에는 여러 개의 셸 변수가 생성되며 그 중 하나의 값을 알고 싶습니다./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. 항목 중 하나는 그 안에 언급된 /etc내용보다 우선해야 하므로 /usr/lib마지막에 가져옵니다.

그런 다음 쉘 변수의 값을 인쇄합니다 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"

답변2

var=$(grep ID_LIKE /etc/os-release)
var=${var#*=}
echo "$var"

데비안

관련 정보