1. ホーム
  2. バッシュ

[解決済み】メタキャラクタの周りに空白が必要な場合があるのはなぜですか?

2022-03-23 18:40:55

質問

数ヶ月前、私はある場所にタトゥーを入れました。 フォークボム 空白がないほうがきれいに見えると思い、空白を省略したのです。しかし、がっかりしたことに 時々 (いつもではありませんが)シェルで実行すると、フォークボムが始まらず、シンタックスエラーが出るだけです。

bash: syntax error near unexpected token `{:'

昨日、友人の家の中で実行しようとしたら起こりました。 バッシュ というシェルがあり、空白を入れたらいきなり動きました。 :(){ :|:& };: ではなく :(){:|:&};:

空白が重要なのか。腕に構文エラーを刺青してしまったのか!

では常に動作するようです。 zsh しかし、Bashではそうではありません。

関連する質問 は空白文字について何も説明していないので、本当に私の質問です。 Bash が正しくパースするために、なぜ空白が必要なのですか?

どのように解決するのですか?

BASHでは、トークンを区切る文字のリストがあります。これらの文字は メタキャラクタ であり、それらは | , & , ; , ( , ) , < , > , 空間 タブ . 一方、中括弧( {} ) は、単語を構成する普通の文字である。

の前の2つ目の空白を省く。 } で十分です。 & はメタキャラクタです。したがって、タトゥーには少なくとも1つの空白文字が必要です。

:(){ :|:&};: