web-dev-qa-db-ja.com

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

〜/ .bashrcでは、割り当ての=記号の周りにスペースを入れてはいけないnot必要があることを知っています。

$ 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は問題について言及しておらず、それぞれのケースでオンラインで狩りをする必要がある場合、どこにも行きません。規則や簡単な確認方法はありますか?ご覧のとおり、複数の人がこのファイルを編集しており(=記号の規則が異なります)、すべてを強制することはできません。スペースを使用しないでください。また、構成されている可能性があり、正しい場合と正しくない場合があるすべてをチェックすることに夢中になることもできません。

EDIT:私が意図しているのは、現在構成されているファイルが適切に実行されるようにすることです。自分でファイルを構成するときは、パッケージメンテナがそこに置くものは何でも慣例に従います。

9
dotancohen

Bashは、テキストの後に=が続く行を変数への割り当てとして解釈しますが、テキストの後にスペースが続く行を引数付きのコマンドとして解釈します。

var=assignment vs command =argument

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

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

20
Lawrence

.bashrcは、my.cnf、php.ini、httpd.conf、またはlaunchd plistと同様に、bashの構成ファイルにすぎません。それぞれに独自の構文があり、bashのスペースなしの割り当てから、launchdのXMLタグスープまでさまざまです(バイナリバージョンもあります:-O)

確固たる慣習はなく、Unixのプライムディレクティブをすでに発見しています。Fineマニュアルを読んでください。

4
paul

一部のプログラムは、構成ファイルのチェックを提供します。次に例を示します。

postfix check

それ以外の場合は、リポジトリから元の構成ファイルを取得し、それらを現在のdiffと比較することができます。

3
user78568

bashで代入を行う場合、=記号の前後のスペースは常に問題になります。例外はありません。bashで有効な単純な割り当て(展開なし、算術なし、配列割り当てなし)を取得する場合は、=の周りのすべてのスペースを削除する必要があります。

構成ファイルの場合、各ソフトウェアには構成ファイルを解析するための独自のパーサーがあるため、bashには関係がありません。構成ファイルで許可されている構文を知るには、ドキュメントを読む必要があります。

例はmysqlで、その初期化スクリプト/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
2
cuonglm