Bash: 解析shell命令字符串

Bash: parse shell command string

给定一个shell命令字符串(ls a\ b "c d" $f),能否bash将其解析成一个数组,最好是bash本身在所有扩展后都能看到它,对吧执行前 (([0]=ls [1]='a b' [2]='c d' [3]=<value of $f>))? IE。 REPL 的 read() 部分。

我想写一个自定义的bind -x函数,我需要解析当前的READLINE_LINE。我试过 read -a,但这只处理反斜杠(例如 "a b" 被拆分为 <"a><b">

希望您能使用下面的代码

#!/usr/bin/env bash
parse(){
    declare -g cmd
    local i
    for i in $(seq 1 $#); do
        cmd[$((i-1))]="${!i}"
    done
    declare -p cmd
}
touch "a b" "c d" "e"
f="e"
trap 'eval "parse $BASH_COMMAND"; trap -- DEBUG' DEBUG
ls a\ b "c d" $f
declare -p cmd