명령과 경로가 포함된 bash 배열 문제

명령과 경로가 포함된 bash 배열 문제

내 맞춤설정을 위한 스크립트를 작성하려고 합니다.파일 클릭모든 머신에서 사용하도록 설정되어 있지만 git update-index -skip-worktree 경로가 계속 끊어집니다. 명령으로 시작하는 배열을 전달합니다. 여기서 배열의 다른 모든 값은 git에서 추적하는 파일 또는 디렉터리 경로입니다. 이것은 코드 조각입니다

fish=("fish" "$XDG_CONFIG_HOME/fish")
gtk=("gtk-launch" "$XDG_CONFIG_HOME/gtk-3.0")
i3=("i3-config-wizard" "$XDG_CONFIG_HOME/i3")

check_install() {
    for var in "$@"
    do
        echo ${var[0]}
        if ! [ -x "$(command -v ${var[0]})" ]; then
            for path in "${var[@]:1}"
            do
                echo locally untracking $path
                git update-index --skip-worktree "$path"
                rm -r "$path"
            done
        fi
    done
}
check_install $fish 
check_install $gtk 
check_install ${i3[@]}

이 항목의 출력

locally untracking ish
fatal: not a git repository (or any parent up to mount point /)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
rm: cannot remove 'ish': No such file or directory
gtk-launch
i3-config-wizard
locally untracking 3-config-wizard
fatal: not a git repository (or any parent up to mount point /)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
rm: cannot remove '3-config-wizard': No such file or directory
/i3
locally untracking i3
fatal: not a git repository (or any parent up to mount point /)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
rm: cannot remove 'i3': No such file or directory
urxvt

나는 bash의 함수에 비교적 익숙하지 않기 때문에 이 함수가 내가 기대한 대로 정확히 작동하지 않는 것 같습니다. 또한, 이 문제를 해결하는 방법에 대한 더 나은 아이디어가 있으면 언제든지 언급해 주시기 바랍니다.

답변1

문제의 일부는 외부 for 루프가 각 항목을 별도의 변수로 저장한 다음 내부 for 루프가 첫 번째 문자를 제거한다는 것입니다. 수정된 함수는 다음과 같습니다.

check_install() {

        echo "${@: -1}"
        if ! [ -x "$(command -v $1)" ]; then
            for path in "${@: -1}"
            do
                echo locally untracking $path
                git update-index --skip-worktree "$path"
                rm -r "$path"
            done
        fi

}

첫 번째 요소만 전달되기 때문에 배열 변수도 잘못 참조됩니다. @steeldriver가 언급한 올바른 방법은 다음과 같습니다."${kak[@]}"

관련 정보