~/.bashrc의 이상한 비교

~/.bashrc의 이상한 비교

Arch 기반 시스템의 파일을 보고 있는데 ~/.bashrc이해할 수 없는 줄이 보입니다.

[[ $'\n'${match_lhs} == *$'\n'"TERM "${safe_term}* ]] && use_color=true

누군가 이것을 설명하거나 이 비교가 자세히 설명되어 있는 bash 문서를 알려줄 수 있습니까? 나는 그것에 대해 아무것도 모르기 때문입니다.

중요한 경우에는 다음 safe_term과 같이 정의되는 match_lhs방법을 보여주는 발췌문이 있습니다.

use_color=false

# Set colorful PS1 only on colorful terminals.
# dircolors --print-database uses its own built-in database
# instead of using /etc/DIR_COLORS.  Try to use the external file
# first to take advantage of user additions.  Use internal bash
# globbing instead of external grep binary.
safe_term=${TERM//[^[:alnum:]]/?}   # sanitize TERM
match_lhs=""
[[ -f ~/.dir_colors   ]] && match_lhs="${match_lhs}$(<~/.dir_colors)"
[[ -f /etc/DIR_COLORS ]] && match_lhs="${match_lhs}$(</etc/DIR_COLORS)"
[[ -z ${match_lhs}    ]] \
    && type -P dircolors >/dev/null \
    && match_lhs=$(dircolors --print-database)
[[ $'\n'${match_lhs} == *$'\n'"TERM "${safe_term}* ]] && use_color=true

답변1

[[ $'\n'${match_lhs} == *$'\n'"TERM "${safe_term}* ]]

분석해 보면 [[ string == pattern ]]문자열과 패턴 일치를 비교한 것입니다. 여기서 패턴은 *"무엇이든"을 의미합니다. 오른쪽에는 고정된 문자열이며 변수의 내용을 제공하는 $'\n'개행 문자가 있습니다 . 따라서 예를 들어 is include 인 경우 문자열 과 그 앞이나 뒤의 모든 항목을 찾습니다 . 왼쪽에는 또 다른 개행 문자와 포함된 내용이 있습니다.TERM${safe_term}${safe_term}xterm<newline>TERM xterm${match_lhs}

이제 다음과 같은 줄을 포함하도록 출력을 ${match_lhs}설정합니다 .dircolors --print-database

TERM Eterm
TERM ansi
TERM *color*
...

실제로 두 구성 파일을 먼저 읽으려고 시도하지만 비슷한 항목이 포함되어야 한다고 가정했습니다.

${safe_term}의 값은 $TERM약간의 정리만 포함됩니다(일부 이전 행).

따라서 사실상 현재 터미널 유형이 $TERM나열된 알려진 터미널 유형에 포함되어 있는지 여부를 테스트합니다 dircolors.

개행 문자는 일치 항목을 줄의 시작 부분에 고정하는 데 사용되며, 첫 번째 줄이 일치하는 경우 왼쪽에 있는 추가 개행 문자가 사용됩니다(그렇지 않으면 앞에 개행 문자가 없습니다).


여기서 혼란스러운 점은 적어도 내 시스템에서는 의 출력에 , 및 dircolors --print-database과 같은 줄이 포함된다는 것입니다 . 이것들은 유효한 패턴이지만 여기 스크립트는 패턴으로 사용하지 않는 것 같습니다.TERM *color*TERM con[0-9]*x[0-9]*TERM xterm*왼쪽[[ str == pattern ]]. 내가 잘못 이해했거나 스크립트 작성자가 실수를 했을 수도 있습니다.

관련 정보