Bash将一个列表附加到数组的结束元素

时间:2017-10-27 08:50:04

标签: arrays bash list append

我正在尝试将一个列表添加到已包含元素的bash数组的末尾,该数组包含{a..z},我想将{0..9}添加到该列表的末尾,I尝试了+ =并且这不起作用它在我的情况下清除了数组。

while [ ! $# -eq 0 ] # Argument selector for CLI input
    do
        case "$1" in
            --num | -n)
                chars=( {0..9} )
                ;;
            --char | -c)
                chars=( {a..z} )
                ;;
            --upper-char | -C)
                chars=( {A..Z} )
                ;;
            --help | -h)
                echo "Type the program name with an argument -n for numbers -c for lowercase char and -C for uppercase"
                exit
                ;;
        esac
        case "$2" in
            --num | -n)
                chars[${#chars[@]}]=( {0..9} )
                ;;
            --char | -c
                chars[${#chars[@]}]=( {a..z} )
                ;;
            --upper-char | -C)
                chars[${#chars[@]}]=( {A..Z} )
                ;;

        esac
        shift
    done

我希望在我弄清楚如何附加列表后再做第三个案例声明,最好的情况是每次我想添加项目时都不需要对数组进行硬编码。

1 个答案:

答案 0 :(得分:0)

追加到数组 +=一起使用。 对你而言,由于代码中的其他错误,它似乎被覆盖了。这应该有效:

while [ ! $# -eq 0 ] # Argument selector for CLI input
do
    case "$1" in
        --num | -n)
            chars=( {0..9} )
            ;;
        --char | -c)
            chars=( {a..z} )
            ;;
        --upper-char | -C)
            chars=( {A..Z} )
            ;;
        --help | -h)
            echo "Type the program name with an argument -n for numbers -c for lowercase char and -C for uppercase"
            exit
            ;;
    esac
    case "$2" in
        --num | -n)
            chars+=( {0..9} )
            ;;
        --char | -c)
            chars+=( {a..z} )
            ;;
        --upper-char | -C)
            chars+=( {A..Z} )
            ;;
    esac
    shift 2
done

当它不适合你的时候, 我怀疑你只有shift而不是shift 2, 并期望script.sh -c -n会为您提供a..z0..9, 但它只给了0..9。 发生的事情只发生在shift之后, 在while循环中仍有一个参数需要处理, 所以在下一次迭代charschars=(...)语句取代。

我建议这个替代实施:

chars=()
while [ $# != 0 ]; do
    case "$1" in
        --num | -n)
            chars+=( {0..9} )
            ;;
        --char | -c)
            chars+=( {a..z} )
            ;;
        --upper-char | -C)
            chars+=( {A..Z} )
            ;;
        --help | -h)
            echo "Type the program name with an argument -n for numbers -c for lowercase char and -C for uppercase"
            exit 1
            ;;
    esac
    shift
done