给定一个任意 Bash "简单命令" 的字符串表示,我该如何将其拆分为包含其各个“部分”的数组,即命令名称和单独的参数,就像 shell 本身(即 Readline)在解析它并决定要运行哪个可执行文件/函数以及传递哪些参数时所做的那样?
这是我的bash脚本尝试解析它的方式:
我需要用什么替换
我的具体用例是需要解析用户定义的别名定义。例如,一个别名可能被定义为:
alias c2="cut -d' ' -f2" # just an example... arbitrary commands should be handled!
这是我的bash脚本尝试解析它的方式:
alias_name="c2"
alias_definition=$(alias -p | grep "^alias $alias_name=") # "alias c2='cut -d'\'' '\'' -f2'"
alias_command=${alias_definition##alias $alias_name=} # "'cut -d'\'' '\'' -f2'"
alias_command=$(eval "echo $alias_command") # "cut -d' ' -f2"
alias_parts=($alias_command) # WRONG - SPLITS AT EVERY WHITESPACE!
echo "command name: ${alias_parts[0]}"
for (( i=1; i <= ${#alias_parts}; i++ )); do
echo "parameter $i : ${alias_parts[$i]}"
done
输出:
command name: cut
parameter 1 : -d'
parameter 2 : '
parameter 3 : -f2
期望输出:
command name: cut
argument 1 : -d' '
argument 2 : -f2
我需要用什么替换
alias_parts=($alias_command)
这一行,才能实现这个目标?