[shell] localで複数宣言

複数宣言する際に、配列も交えて宣言ができる

myfunc(){
    local next words=() prev
    next="taiwan"
    prev="korea"
    words=("a" "b" "c")
    echo $prev
    echo ${words[@]}
}
myfunc

$ bash cli.bash
korea
a b c

これで、以下のlocalの宣言の意味もわかりますね。

_bitcoin_cli() {
    local cur prev words=() cword
    local bitcoin_cli

    # save and use original argument to invoke bitcoin-cli for -help, help and RPC
    # as bitcoin-cli might not be in $PATH
    bitcoin_cli="$1"

    COMPREPLY=()
    // 省略
}
    if ((cword > 5)); then
        case ${words[cword-5]} in
            sendtoaddress)
                COMPREPLY=( $( compgen -W "true false" -- "$cur" ) )
                return 0
                ;;
        esac
    fi

この COMPREPLY=( $( compgen -W “true false” — “$cur” ) ) は何をやっているかというと、COMPREPLYの中にcompgen … のコマンドを入れていますね。

COMMAND=()
COMMAND=( $(date -d tomorrow) )

echo ${COMMAND[@]}

つまりbitcoin_cliで打った時のコマンド処理を書き換えています。