Bash即使我嘗試了,Bash 仍然會刪除第三個參數的最後一部分*‘和d_‘∗‘一個nd‘*
即使我嘗試了,Bash 仍然會刪除第三個參數的最後一部分*‘和d_‘∗‘一個nd‘*and
@`
我嘗試了以下問題:
我正在執行
docker-compose
檢查 Dockerfile。查看我的腳本:
archlinux="pacman" get_package_manager_install() { if [[ -x "$(command -v $1)" ]]; then "$1 $2 $3" else echo "Gestor do pacote desconhecido" &>/dev/null; fi } get_package_manager_install "$archlinux" "-S --noconfirm --needed" "ca-certificates curl git p7zip wget unzip zstd" get_package_manager_install "$archlinux" "-S --noconfirm --needed" "htop micro neofetch neovim zsh" get_package_manager_install "$archlinux" "-S --noconfirm --needed" "luit xdotool xdriinfo xorg-appres xorg-iceauth xorg-xcmsdb xorg-xgamma xorg-sessreg xorg-xdpyinfo xorg-xev xorg-xfd xorg-xfontsel xorg-xhost xorg-xkbcomp xorg-xkill xorg-xlsatoms xorg-xlsclients xorg-xlsfonts xorg-xmessage xorg-xmodmap xorg-xprop xorg-xrandr xorg-xrdb xorg-xrefresh xorg-xset xorg-xvidtune xorg-xvinfo xorg-xwininfo"
請注意,我也已經替換
"$1 $2 $3"
為$@
or$*
。我也嘗試$(echo "$@")
過$(echo "${@}")
我也已經在最後一個參數中替換了,但沒有成功
" "
。' '
例如,它剪切了參數的最後一部分,
git p7zip wget unzip zstd
並且htop micro neofetch neovim zsh
不會安裝整體。
您需要
-S
,--noconfirm
和--needed
包作為單獨的參數傳遞給pacman
, 所以:archlinux="pacman" get_package_manager_install() { if command -v -- "$1" > /dev/null 2>&1; then "$@" else echo >&2 "Gestor do pacote desconhecido" return 1 fi } get_package_manager_install "$archlinux" -S --noconfirm --needed ca-certificates curl git p7zip wget unzip zstd
Where
get_package_manager_install
將所有這些作為單獨的參數傳遞,get_package_manager_install
並將它們按原樣傳遞給pacman
.如果您只想
get_package_manager_install
使用 3 個參數,並且將第二個和第三個參數拆分為空格字元以生成要傳遞給的參數列表,則pacman
可以使用 split+glob 運算符(由於忘記引用而錯誤地使用了該運算符$1
)您的程式碼),在禁用 glob 部分並設置$IFS
為空格後:get_package_manager_install() { if command -v -- "$1" > /dev/null 2>&1; then ( set -o noglob IFS=' ' exec "$1" $2 $2 ) else echo >&2 "Gestor do pacote desconhecido" return 1 fi } get_package_manager_install "$archlinux" \ '-S --noconfirm --needed' 'ca-certificates curl git p7zip wget unzip zstd'
雖然我無法想像你為什麼要這樣做。
我也不清楚為什麼要命名包含包管理器名稱的變數,
archlinux
該名稱是 Linux 發行版的名稱。