bashとfindで\はどういう意味ですか?

bashとfindで\はどういう意味ですか?

私はそれが\エスケープ文字であることを知っていますが、\bashに書くと、次のようなものが表示されます。

System-Product-Name:~$ \
> 

それでは、bashはいくつかの指示を待っていますか?私が使うとき

System-Product-Name:~$ \
> ls

これは仕事です。しかし、私が使うとき

System-Product-Name:~$ cd Wideo \
> ls
bash: cd: too many arguments

それでは、バックスラッシュはパイプのように動作しますか|?私はそうは思わない。

このコマンドを使用するとき:

find . -name "FILENAME"  -exec rm {} \;

なぜ終了するのですか?このコマンドは、find正しいファイルを見つけて、そのファイルが見つかったパスexecから削除するようです。これがなければ、私が受け取った情報は-exec根拠がなく理解できません。なぜ使用できないのですか?

find . -name "FILENAME"  -exec rm {}

私はman findのexecに関する情報だけを持っています。

execは、-exec、-execdir、-ok、および-okdirに関連する診断情報を表示します。

それでは、execを使用するときになぜ終了するのですか?たとえば、私が使うとき

find . -name "FILENAME"

終了する必要はありません。

答え1

\「この行は行の終わりではありません。この行は次の行に続きます」(コマンドにはcd2つの引数が多すぎます)を意味する行の終わりと、次の行を\防ぐ行の内側とを区別する必要があります。特別な意味を持つキャラクター。

次に、\;あなたの例では、findリテラルを;引数として提供することを意味します。それ以外の場合、これは\シェルに特別な意味を持ち、1つのコマンドと次のコマンドの間の区切り文字として使用されます。;find

このパラメーターはオプションと一緒に使用するときに必要なので、付属の;コマンドが終わる場所を知ることができます。別のオプションは2つのパラメータの合計です。詳しくはマニュアルをお読みください。find-execfind-exec{}+find(1)

答え2

このように使用される\文字はしばしば次の文字を「エスケープする」と呼ばれるため、bashは次の文字の特別な意味を取り除き、それをbashコマンドライン処理の一部ではなくリテラル文字として扱います。バラよりhttps://stackoverflow.com/a/3871336/1663987bashのマニュアルやその他の情報を参照してください。

だから

find . -name "FILENAME"  -exec rm {} \;

bashコマンド間の区切り文字として扱うのではなく、findコマンド引数にリテラルセミコロンを挿入するようにbashに指示します(ala echo hello; echo world)。

~のため

ls some\ file

ls 引数を区切る文字ではなく、ファイル名の一部としてスペースを処理するように bash に指示します。したがって、使用されているように、「some」と「file」という2つの異なるファイルの代わりlsに、「some file」という単一のファイルの出力が表示されます。ls some file

~のため

cd Wideo \
> ls

改行文字をコマンドの終わりとして扱うのではなく、引数を探すように bash に指示するので、コマンドは次のように表示されますcd Wideo ls。この効果をしばしば行連続と呼びます。

答え3

「Bash では」改行文字をエスケープします。 findではエスケープされます;

通常、と入力すると、Enterシェルはそれをコマンドの最後に読み込みます。\Enter文字通り新しい行に解釈すると。

ここでパズルの2番目の部分は、コマンドと引数に改行文字を含めることができることを認識することです。できないというルールはありません。ほとんどの人は不快なので使用を避けます。

ただし、以下は有効なファイル名とls有効なcd引数です。

foo
bar

ただ入力することはできません。

cd foo
bar

シェルで試してcd fooから実行しますbar。しかし、できることが必要です。

cd 'foo
bar'

これにより、find次の構文が得られますfind -exec some_commandsome_commandスペースが含まれる可能性があるため、コマンドが終了する場所を見つけるためにfind検索が実行されます。;と入力すると、find -exec bar ;bashは呼び出しが;終わったと思うので、find単にfindに渡されます-exec bar

リテラル文字を意味するとシェルに知らせる必要があります;\;、またはを使用してこれを行うことができますfind -exec bar ';'man find説明する:

find の次の引数は、すべて ';' で構成される引数が表示されるまでコマンドの引数として扱われます。

これは、パラメータが;コマンドの後に来なければならないことを意味します-exec

関連情報