= 기호 주변의 공백은 언제 금지됩니까?

= 기호 주변의 공백은 언제 금지됩니까?

~/.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

이 질문에 대해서는 더 자세히 답변해 드리겠습니다.일반적인방법 - 전체 "유닉스"를 조금 살펴보세요학습 경험".

귀하의 예에서는 두 도구를 모두 사용하고 언어가 유사한 것을 확인합니다. 정확히 언제 무엇을 사용해야 하는지는 명확하지 않습니다. 물론 당신은기대할 수 있다분명하다구조, 그래서 우리에게 설명을 요청하셨습니다.
주변에 공간이 있는 상황은 =하나의 예일 뿐입니다.비슷하지만 상당히 로봇적임사례.
거기~ 해야 하다그 안에는 논리가 있고,옳은? !

이것규칙누군가를 위해 코드를 작성하는 방법도구, 쉘, 데이터베이스 등오직 의존한다이 특정 도구에 대해필요.

이것은 의미한다도구완전히독립적인, 기술적으로 말하면. 이것논리방금 예상한 것 같은데존재하지 않는다.

분명한유사당신이 보는 언어는프로그램에 포함되지 않음구현하다. 유사점이 존재하는 이유는개발자가 동의했습니다.특정 프로그램용으로 작성할 때 이를 수행하는 방법. 하지만 인간은 동의할 수밖에 없다.부분적으로.

이것관계당신이 보는 것은문화것 - 그렇죠어느 것도 아니다~의 일부구현하다, 여기도 아니야언어 정의.



이제 이론이 완성되었으니 실제로 무엇을 해야 할까요?

큰 발걸음은수용하다생각하다일관성당신이 기대했던 것존재하지 않는다- 이해하고 나면 더 쉬울 것입니다.이유- 이론 부분이 도움이 되었으면 좋겠습니다.

동일한 구성 언어(예: 두 bash 스크립트)를 사용하지 않는 두 도구가 있는 경우 하나의 구문 세부 정보를 아는 것은 다른 도구를 이해하는 데 큰 도움이 되지 않으므로
실제로 찾아보아야 합니다.독립적인 상세한 설명. 어디서 찾을 수 있는지 확인하세요.참조 문서각각.

장점으로는 예상하지 못한 일관성이 있습니다. 단일 도구(또는 동일한 언어를 사용하는 다른 도구)의 컨텍스트 내에서 구문이 일관성이 있다는 것을 상당히 확신할 수 있습니다.
귀하의 예에서 mysql이는 모든 행에 동일한 규칙이 있다고 가정할 수 있음을 의미합니다. 따라서 규칙은 "앞과 뒤에 공백이 있습니다" =입니다.관련 없는".

넓은차이점어떻게딱딱한도구를 학습하거나 사용하기 위한 구성 또는 스크립팅 언어입니다.
"와 같은 것일 수 있습니다.foo 값 나열cmd-foo.conf에서 한 줄에 하나씩. ".
그것은 완전할 수 있다 .스크립팅 언어이것은 다른 곳에서도 사용됩니다. 그러면 구성 작성을 위한 강력한 도구가 있습니다. 어떤 경우에는 괜찮지만 다른 경우에는 꼭 필요합니다.
복잡한 도구, 또는 관련 도구의 대규모 제품군은 때때로 매우복잡한 특수 구성파일 구문 - (일부유명한예는 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

관련 정보