我下載了一個開源套件和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 呢?
第一行 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