~/.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 ]]。私が間違って理解したか、スクリプト作成者が間違いを犯した可能性があります。

関連情報