`$*` 및 `$@`를 시도했지만 Bash는 여전히 세 번째 인수의 마지막 부분을 잘라냅니다.

`$*` 및 `$@`를 시도했지만 Bash는 여전히 세 번째 인수의 마지막 부분을 잘라냅니다.

나는 다음 질문을 시도했습니다.

docker-composeDockerfile 검사를 실행 중입니다 .

내 스크립트를 보세요:

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두 번째와 세 번째 인수를 공백 문자로 분할하여 전달할 인수 목록을 생성하려는 경우 분할+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 배포판의 이름인 패키지 관리자의 이름을 포함하는 변수 이름이 왜 지정되었는지 잘 모르겠습니다 .

관련 정보