バックスラッシュドットはコマンドとして何を意味しますか?


17

私がインストールしたソフトウェアは、プロファイルに次のような行を挿入しました:

[ -s "$SOME_FILE" ] && \. "$SOME_FILE"

dot .はの同義語であることがわかっているsourceので、これはファイルをソースしているだけではないかと思いますが、これまで見たことはありません\.。それは他に何かをしますか?

DVに関する編集:「バックスラッシュドット」を検索./すると、実行可能ファイルを呼び出すタイミングに関する質問man sourceが表示され、マンページが\.表示されなくなります。私は他に何を試すべきかわからないので、質問です。

編集2:関連する質問を見る

回答:


31

引用符の外側のバックスラッシュは、「解析中に次の文字を文字通り解釈する」ことを意味します。以来、.パーサーの通常の文字であり、\.同じ方法で解析され.、そして組み込みを呼び出す.(そのsourcebashでシノニムです)。

このコンテキストで違いを生む可能性があるケースが1つあります。ユーザーはという別名が定義されている場合.、以前の中を.profile、そして.profileエイリアスを展開するシェルに読み込まれている(これはbashのそれが対話的に呼び出されます場合にのみ、デフォルトではない)、その後、.エイリアスをトリガーするだろうが、\.まだ組み込みの引き金となり、シェル理由何らかの方法で引用された単語に対してエイリアス展開を試みません。

ユーザーがのエイリアスを作成した後に苦情を申し立てたため.に変更され\.たのではないかと思い.ます。

\.という関数が呼び出されることに注意してください.。おそらく、関数を記述するユーザーは、エイリアスを記述するユーザーよりも知識が豊富で.profileあり、サードパーティのコードを含める場合は、標準コマンドを再定義することはお勧めできません。ただし、エイリアスと関数の両方をバイパスする場合は、と書くことができますcommand .。このスニペットの作成者は、command組み込みのない旧式なシェルを気にかけているため、またはおそらくそれを認識していないため、これをしませんでした。

ちなみに、定義の任意で別名は.profileので悪い考えで.profileあるセッションの初期化スクリプトではなく、シェル初期化スクリプト。bashのエイリアスはに属し.bashrcます。


9

\.「リテラルドット」、つまりただのドットです。これは標準.コマンドとして使用されます(sourcein と同様bash)。

POSIX標準には、これについて言うべきことがあります(私の強調)

<backslash>引用符で囲まれていないA は、aを除いて、次の文字のリテラル値を保持します<newline>。がに<newline>続く場合、<backslash>シェルはこれを行継続として解釈します。そしてトークンに入力を分割する前に除去されなければなりません。エスケープされた文字列は入力から完全に削除され、空白文字に置き換えられないため、トークン区切り文字として機能することはできません。<backslash><newline><newline>

ドット文字にエイリアスを付けることできます:

$ alias .='echo hello'
$ .
hello

つまり\..コマンドのエイリアスバージョンを使用しないようにします。なぜなら

トークンが区切られた後、Shell Grammarで文法規則を適用する前に、単純なコマンドのコマンド名の単語であると識別された結果の単語を調べて、引用符で囲まれていない有効なエイリアス名であるかどうかを判断します。


単語のバックスラッシュが引用として解釈される方法と、これがエイリアスの展開を防ぐ方法についての公式ソースを探していました。参照いただきありがとうございます!
シェルジョン

1
@Sheljohn最新の回答をご覧ください。
クサラナナンダ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.