오픈 소스 패키지와 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
sed_quote_subst
: 그것은 어떤 가치를 갖고 있나요? 의 존재로 인해''
일부 메타가''
비활성화되었습니다. 그러나 나는 그들이 어느 것인지 모릅니다.#!/bin/bash
& zsh 에뮬레이트: 첫 번째 줄은 이 스크립트가 bash에서 실행되고 있음을 선언합니다. 그렇다면 왜 zsh의 에뮬레이트가 있는 걸까요?alias -g '${1+"$@"}'='"$@"'
: 방금 다른 bash에 이것을 입력했는데 오류가 발생했습니다.-g :invalid option
zsh와 bash의 차이점과 함께 작동하는 방식에 대해 혼란스러워요. 나한테 설명해 주실 수 있나요?
나는 이것에 대한 새로운 손이므로 이 질문은 당신에게 그다지 "유용하지" 않을 수도 있습니다. 하지만 당신의 대답은 제가 이 세상을 더 잘 이해하는 데 도움이 될 수 있습니다.
답변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
alias -g '${1+"$@"}'='"$@"'
: 방금 다른 bash에 이것을 입력했는데 오류가 발생했습니다.-g :invalid option
zsh와 bash의 차이점과 함께 작동하는 방식에 대해 혼란스러워요. 나한테 설명해 주실 수 있나요?
그것은 매우 광범위한 질문입니다. zsh와 bash의 모든 차이점을 설명하지는 않겠습니다. 두 가지에 대한 문서를 읽어보세요. 의 특정 지점에 대해 alias -g
zsh는글로벌별칭. Bash에서 별칭은 줄 시작 부분에서만 대체됩니다. zsh에서는 alias -g
줄의 모든 곳에서 대체되는 전역 별칭을 정의합니다.
따라서 zsh에서 다음을 수행하면:
alias -g foo=bar
그런 다음 다음을 실행합니다.
echo foo
출력은 다음과 같습니다:
bar
답변2
귀하의 질문에는 정보가 부족하지만 다음과 같이 답변해 드리겠습니다.
sed 정규식 이해하기
s/\([`"$\\]\)/\\\1/g' ^ ^ ^----------------- with The character with a leading \ | | | --- the characters `"$\ | |-- replace
그래서
"
된다\"
스크립트를 실행할 때 zsh는 내가 좋아하는 것이 아닙니다.
다음과 같은 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