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
给定一个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