Joe*_*ley 9 bash stdin command-substitution parameter-expansion
我最近遇到了这个非常简洁的语法,在创建bash
可以接受来自STDIN的参数或流的函数的上下文中(即可以通过管道传递).从表面上看,我理解这里发生了什么,但我想更多地解释一下这是如何工作的实际机制.
这是语法(根据标题): ${1:-$(</dev/stdin)}
在上下文中,可以将其用作:
log(){
echo -e >&1 "INFO: ${1:-$(</dev/stdin)}"
}
Run Code Online (Sandbox Code Playgroud)
允许以下用法:
$ log foo
INFO: foo
Run Code Online (Sandbox Code Playgroud)
或者,您也可以这样做
mv -v foo.ext bar.ext | log
INFO: renamed 'foo.ext' -> 'bar.ext'
Run Code Online (Sandbox Code Playgroud)
这很棒,因为它是我看到的用于启用参数和管道功能的单一最简洁的方法bash
(不幸的是我忘记了我现在遇到它的地方).
现在,我理解(或者我认为我理解),这里发生的大部分事情至少表面上看,但我会更加理解.这是我如何解释它,然后是我剩下的问题:
${1:-$(</dev/stdin)}
${1}
显然是函数接受的默认参数${1:-x}
是否为变量/大括号扩展'后退'到字符串'x'
,$1
否则为空(或未设置?).在这种情况下,回退到STDIN进程子.$()
显然是一个</dev/stdin
显然是标准输入的重定向,它允许管道工作.这基本上说如果$1
不是由参数填充,则回退到使用STDIN - 我在概念上很满意.
所以这是我的问题:
<
在$(cat < somefile.ext)
).那么当 归档时间: |
|
查看次数: |
210 次 |
最近记录: |