オープンソース パッケージをダウンロードしました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 emulate: 最初の行は、このスクリプトが bash で実行されていることを宣言しています。では、なぜ zsh からの emulate があるのでしょうか?alias -g '${1+"$@"}'='"$@"'
: 別の bash でこれを入力すると、エラーが発生します:-g :invalid option
、zsh と bash の違い、およびこれらがどのように連携するかについて混乱しています。説明していただけますか?
私はこの分野の初心者なので、この質問はあなたにとってそれほど「役に立つ」ものではないかもしれません。しかし、あなたの答えは私がこの世界をよりよく理解するのに役立ちます。
答え1
#!/bin/bash
& zsh emulate: 最初の行は、このスクリプトが bash で実行されていることを宣言しています。では、なぜ zsh からの emulate があるのでしょうか?
最初の行のシェバンは、スクリプトが直接実行される場合、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