bash - Bash:解析shell命令字符串
问题描述
ls a\ b "c d" $f
给定一个shell 命令字符串bash
(([0]=ls [1]='a b' [2]='c d' [3]=<value of $f>)
即 REPL 的 read() 部分。
我想写一个自定义bind -x
函数,我需要解析当前的READLINE_LINE
. 我试过read -a
了,但这只需要处理反斜杠(例如"a b"
被分成<"a>
and <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
推荐阅读
- pdf - 跟踪 PDF 文档的读者群
- html - 导航栏在应用位置后更改其位置:对其进行固定值
- git - Git:删除损坏的存储
- python - 如何将 python 命令作为用户的输入并将其功能作为输出
- esper - Esper EPL 模式 A BEFORE B
- javascript - 异步 JavaScript 程序中的函数调用究竟是如何排序的?
- azure - 作为 ADF 流程的一部分,是否可以在自托管运行时加密和压缩文件?
- r - 动态创建和选择的 R data.table 语法
- django - django.db.utils.OperationalError:无法将主机名“postgis-container”转换为地址
- callback - 如何在 Airflow 1.10.10+composer 中使用 on_failure_callback?