"관리자" scipts에서 혼란스러운 부분이 있습니다.

"관리자" scipts에서 혼란스러운 부분이 있습니다.

오픈 소스 패키지와 make. 하지만 admin시작하려고 스크립트를 실행하면 오류가 발생합니다 . 나는 그것이 에 관한 몇 가지 문제라는 것을 발견했습니다 path. 그러나 여전히 나를 혼란스럽게 하는 몇 가지 문제가 있습니다.

#! /bin/bash

# ionadmin - temporary wrapper script for .libs/ionadmin
# Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1.7ubuntu1
#
# The ionadmin program cannot be directly executed until all the libtool
# libraries that it depends on are installed.
#
# This wrapper script should never be moved out of the build directory.
# If it is, it will not operate correctly.

# Sed substitution that helps us do robust quoting.  It backslashifies
# metacharacters that are still active within double-quoted strings.
sed_quote_subst='s/\([`"$\\]\)/\\\1/g'

# Be Bourne compatible
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
  emulate sh
  NULLCMD=:
  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
  # is contrary to our usage.  Disable this feature.
  alias -g '${1+"$@"}'='"$@"'
  setopt NO_GLOB_SUBST
else
  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
fi
  1. sed_quote_subst: 그것은 어떤 가치를 갖고 있나요? 의 존재로 인해 ''일부 메타가 ''비활성화되었습니다. 그러나 나는 그들이 어느 것인지 모릅니다.
  2. #!/bin/bash& zsh 에뮬레이트: 첫 번째 줄은 이 스크립트가 bash에서 실행되고 있음을 선언합니다. 그렇다면 왜 zsh의 에뮬레이트가 있는 걸까요?
  3. alias -g '${1+"$@"}'='"$@"': 방금 다른 bash에 이것을 입력했는데 오류가 발생했습니다. -g :invalid optionzsh와 bash의 차이점과 함께 작동하는 방식에 대해 혼란스러워요. 나한테 설명해 주실 수 있나요?

나는 이것에 대한 새로운 손이므로 이 질문은 당신에게 그다지 "유용하지" 않을 수도 있습니다. 하지만 당신의 대답은 제가 이 세상을 더 잘 이해하는 데 도움이 될 수 있습니다.

답변1

  1. #!/bin/bash& zsh 에뮬레이트: 첫 번째 줄은 이 스크립트가 bash에서 실행되고 있음을 선언합니다. 그렇다면 왜 zsh의 에뮬레이트가 있는 걸까요?

첫 번째 줄인 shebang은 스크립트가 직접 실행될 경우 bash를 사용하여 실행된다는 것을 나타냅니다. zsh를 사용하여 실행하는 것을 방해하는 것은 없습니다.

zsh admin.sh

저자가 왜 zsh를 테스트하려고 생각했는지 모르겠지만 실제로 그렇게 했습니다. 이 코드 섹션은 zsh용이며 bash에서는 실행되지 않습니다.

emulate sh
NULLCMD=:
# Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
# is contrary to our usage.  Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
  1. alias -g '${1+"$@"}'='"$@"': 방금 다른 bash에 이것을 입력했는데 오류가 발생했습니다. -g :invalid optionzsh와 bash의 차이점과 함께 작동하는 방식에 대해 혼란스러워요. 나한테 설명해 주실 수 있나요?

그것은 매우 광범위한 질문입니다. zsh와 bash의 모든 차이점을 설명하지는 않겠습니다. 두 가지에 대한 문서를 읽어보세요. 의 특정 지점에 대해 alias -gzsh는글로벌별칭. Bash에서 별칭은 줄 시작 부분에서만 대체됩니다. zsh에서는 alias -g줄의 모든 곳에서 대체되는 전역 별칭을 정의합니다.

따라서 zsh에서 다음을 수행하면:

alias -g foo=bar

그런 다음 다음을 실행합니다.

echo foo

출력은 다음과 같습니다:

bar

답변2

귀하의 질문에는 정보가 부족하지만 다음과 같이 답변해 드리겠습니다.

  1. sed 정규식 이해하기

    s/\([`"$\\]\)/\\\1/g'
    ^     ^         ^----------------- with The character with a leading \
          | 
    |     | --- the characters `"$\
    |
    |-- replace
    

    그래서 "된다\"

  2. 스크립트를 실행할 때 zsh는 내가 좋아하는 것이 아닙니다.

  3. 다음과 같은 if 문을 테스트하세요.

    if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 
         echo "Does the if statement run in my shell?"; 
    else 
         echo "The else statement runs in my shell"; 
    fi 
    

관련 정보