私は次の質問を試しました。
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"
私も努力しました。$@
$*
$(echo "$@")
$(echo "${@}")
私も成功せずに最後のパラメータをに置き換えました" "
。' '
たとえば、パラメータの最後の部分を削除すると、git p7zip wget unzip zstd
全体がhtop micro neofetch neovim zsh
インストールされません。
答え1
-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
get_package_manager_install
これらすべてを別々の引数として where に渡しているget_package_manager_install
ままに渡しますpacman
。
3つの引数のみを取り、get_package_manager_install
2番目と3番目の引数を空白文字に分割して渡す引数のリストを生成したい場合は、分割+glob演算子を使用できます(コードでpacman
忘れたため、誤って使用されます)。$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ディストリビューションの名前であるパッケージマネージャの名前を含む変数名がなぜ指定されたのかわかりません。