我正在编写一个脚本来启动 TS-7400 ARM SBC,我希望它能够读取通过 SD 卡上的配置文件传递的一些参数和可选内核参数。我调用了我的配置文件syscfg.conf
,它是使用KEYWORD=value
对组织的,但是由于内核参数本身可以具有相同的语法,所以我想到了像这样分隔值:
CMDLINE_ARGS="elevator=noop scheduler=noop"
在常规 bash 中进行测试时,我能够使用以下任一方法隔离内核命令行参数:
$ grep CMDLINE_ARGS syscfg.conf | sed 's/CMDLINE_ARGS="\(.*\)"/\1/'
elevator=noop scheduler=noop
$ grep CMDLINE_ARGS syscfg.conf | cut -d'"' -f2
elevator=noop scheduler=noop
$ awk -F'"' '/CMDLINE_ARGS/ {print $2}' syscfg.conf
elevator=noop scheduler=noop
但是当它在 TS-LINUX 上运行时,这是一个基于 busybox 的精简 Linux,用于引导自定义内核或应用程序,它不像在常规 bash 中那样工作。虽然该awk
命令甚至不存在,但该cut
版本运行良好,但sed
返回此:
CMDLINE_ARGS="elevator=noop scheduler=noop"
为什么busybox的sed
实现会这样?我希望它只输出分隔符\1
之间的任何字符的“”组-正则表达式,而不是返回整个字符串。有什么办法可以让它像在 bash 中一样工作吗?"
"(.*)"