コマンドとパスを含む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[@]}"

おすすめ記事