나는 /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"
데비안