我想在tcl中执行以下行:
exec awk -F"[][]" '/dB/ { print $2 }' <(amixer sget Master)
但错误:missing close-brace出现.
然后我换了这个:
exec awk -F"[][]" {/dB/ { print $2 }} <(amixer sget Master)
用大括号更改单引号.现在的错误是:
无法读取文件 "(amixer": no such file or directory
然后我改为:
exec awk -F{[][]} {/dB/ { print $2 }} <(amixer sget Master)
仍然与后者相同的错误.
我真的很挣与exec命令的tcl解析机制.请帮忙.谢谢.
amixer sget主输出:
Capabilities: pvolume pvolume-joined pswitch pswitch-joined
Playback channels: Mono
Limits: Playback 0 - 64
Mono: Playback 39 [61%] [-25.00dB] [on]
Run Code Online (Sandbox Code Playgroud)
shell和Tcl具有完全不同的语法,这是一个重要的领域.shell调用的正确音译:
awk -F"[][]" '/dB/ { print $2 }' <(amixer sget Master)
Run Code Online (Sandbox Code Playgroud)
这是:
exec amixer sget Master | awk {-F[][]} {/dB/ { print $2 }}
Run Code Online (Sandbox Code Playgroud)
在partixular中,Tcl和shell对如何引用事物以及需要引用的内容有不同的看法.而且,awk从stdin中获取输入更容易,而不是试图使Tcl句柄管道完全按照shell的方式进行重定向(你可以做到,但它很难,真的不值得打扰对于这个简单的事情).
当然,您可以改为使用Tcl进行解析,因为它具有合理的正则表达式匹配支持.例如,这会将分贝级别存储在变量中decibels:
set mixer "Master"
regexp {\[([\d.]+)dB\]} [exec amixer sget $mixer] -> decibels
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4251 次 |
| 最近记录: |