=記号の周りのスペースはいつ禁止されますか?

=記号の周りのスペースはいつ禁止されますか?

~/.bashrcでやるべきことを知っています。いいえ=課題では、シンボルの周りにスペースを入れます。

$ tail -n2 ~/.bashrc 
alias a="echo 'You hit a!'"
alias b = "echo 'You hit b!'"

$ a
You hit a!

$ b
b: command not found

MySQL設定ファイルを見ているところで、/etc/my.cnf次のことがわかりました。

tmpdir=/mnt/ramdisk
key_buffer_size = 1024M
innodb_buffer_pool_size = 512M
query_cache_size=16M

=ロゴの周りのスペースに問題がないかどうかを確認するには?

この問題はファイルに限定されず、/etc/my.cnf通常は* NIX構成ファイルで発生します。私の最初の傾向はRTFMですが、実際にはman mysqlこの問題について言及していないので、すべてのケースをオンラインで見つけなければならない場合は、何も起こりません。確認するルールや簡単な方法はありますか?ご覧のとおり、複数の人がこのファイルを編集し(=シンボルのさまざまな規則)、誰もが空白を使用しないように強制することも、構成されている可能性があり、正確であるか正確でない可能性があるすべてのものをクレイジーにすることもできません。 。

編集する:私の目的は、現在設定されているファイルが正しく完了していることを確認することです。私はファイルを直接設定するときにパッケージマネージャがファイルに入れるすべての規則に従います。

答え1

Bash はテキスト行の後に a が続くことを=変数への代入として解釈しますが、テキスト行の後に空白が続くのは引数のあるコマンドとして解釈します。

var=assignmentそしてcommand =argument

Bashスクリプトは、スクリプトのすべての内容がコマンドラインに入力したかのように機能するという点で動作します。

(または他のシェル)によって解釈されない構成ファイルは、bash構成ファイルを読み取るために使用されるパーサーによって決定されます。一部のパーサーはスペースを使用し、一部はスペースを使用しません。この場合、アプリケーションによって異なります。個人的には、私はデフォルトプロファイルが使用するすべての規則に従います。

答え2

.bashrcはmy.cnf、php.ini、httpd.conf、launchd plistなどのbash設定ファイルに過ぎません。それぞれに、bashの空白のない割り当てからlaunchdのXMLタグスープまで、独自の構文があります(バイナリバージョンもあります:-O)。

固定ルールはなく、Unixのトップディレクティブを見つけました。美しい手動。

答え3

この質問につきましては、より詳しくお答えいたします。一般的な方法 - 全体の「Unix」を少し見てください学習体験」。

あなたの例では、両方のツールを使用し、言語が似ていることを確認します。正確にいつ何を使うべきかは明確ではありません。もちろん期待できるはっきり構造だから、私たちに説明を求めました。
周囲に空間がある状況は=一例に過ぎません。似ていますが、かなりロボット的ですケース。
そこ〜しなければならないその中には論理があり、正しいですか? !

これルール誰かのためにコードを書く方法ツール、シェル、データベースなどただ依存するこの特定のツールについて必要

これは意味するツール完全独立、技術的に言えば。これロジック私は予想したようです。存在しない

明らか類似あなたが見る言語はプログラムに含まれない実装する。類似点が存在する理由は開発者が同意した。特定のプログラム用に作成するときにこれを行う方法。しかし、人間は同意するしかない。部分的に

これ関係あなたが見るもの文化そうですね。どちらもありません~の一部実装する、ここでもない言語定義



これで理論が完成したので、実際に何をすべきですか?

大きな足は受け入れる考える一貫性あなたが期待していたこと存在しない- 理解したら簡単になります。理由- 理論の部分が役に立つことを願っています。

同じ構成言語(2つのbashスクリプトなど)を使用しない2つのツールがある場合は、1つの構文の詳細を知ることは他のツールを理解するのにあまり役に立ちません
独立した詳細な説明。どこで見つけることができるかを確認してください。参照文書それぞれ。

利点としては、予期しない一貫性があります。単一のツール(または同じ言語を使用する他のツール)のコンテキスト内で構文が一貫していることをかなり確信で​​きます。
あなたの例では、mysqlこれはすべての行に同じ規則があると仮定できることを意味します。したがって、規則は「前後に空白があります」=です。無関係」。

広い違いどのように硬いツールを学習または使用するための構成またはスクリプト言語。
「のようなものかもしれません。foo値のリストcmd-foo.confで1行に1つずつ。 「.
それは完全である場合もある 。スクリプト言語これは他の場所でも使用されます。これにより、構成を作成するための強力なツールがあります。場合によっては大丈夫ですが、他の場合は必須です。
複雑なツール、または関連ツールの大規模なスイートは、時には非常に複雑な特殊構成ファイル構文 - (一部有名な例はsendmailvim)です。
他の人が使う汎用スクリプト言語を基本とし、延長するこの言語はサポートしています特別な要求、時には言語が許可するように複雑な方法で行われます。それは非常に具体的なケースドメイン固有の言語(DSL)

答え4

=で作業するとき、記号の周りのスペースは常に問題ですbash。ここでも例外はありません。=で有効な単純な割り当て(拡張なし、算術なし、配列割り当てなし)を取得するには、周囲のスペースをすべて削除する必要がありますbash

構成ファイルの場合、各ソフトウェアには構成ファイルを解析する独自のパーサーがあるため、bash重要ではありません。構成ファイルで許可されている構文を理解するには、マニュアルを読んでください。

たとえば、mysqlinitスクリプトには/etc/init.d/mysqldパーサがありますmy.cnf

# Try to find basedir in /etc/my.cnf
  conf=/etc/my.cnf
  print_defaults=
  if test -r $conf
  then
    subpat='^[^=]*basedir[^=]*=\(.*\)$'
    dirs=`sed -e "/$subpat/!d" -e 's//\1/' $conf`
    for d in $dirs
    do
      d=`echo $d | sed -e 's/[  ]//g'`
      if test -x "$d/bin/my_print_defaults"
      then
        print_defaults="$d/bin/my_print_defaults"
        break
      fi
      if test -x "$d/bin/mysql_print_defaults"
      then
        print_defaults="$d/bin/mysql_print_defaults"
        break
      fi
    done
  fi

関連情報