这就是我写的;例如,
ls > out && cat * > out
但是,我不喜欢重复代码(真实案例要复杂得多),所以我试过
{ ls && cat * } > out
可悲的是,它不起作用,因为它不符合Bash语法,所以如何修复它?
答案 0 :(得分:1)
首先,您的命令分组语法不正确,您需要在结束括号之前有;
:
{ ls && cat * ;}
如果您使用的是子{,()
,例如(ls && cat *)
,则;
不需要*
,但在此处生成子shell是多余的。
接下来的问题是,当全局(out
)输出文件>out
也被计算时,因为文件将在扩展发生之前由shell(cat
)创建,或者任何其他命令运行(并且out
可能会警告您输入/输出文件与GLOBIGNORE
有关。要解决这个问题:
您可以使用bash
环境变量让GLOBIGNORE=out; { ls && cat * ;} >out
知道在执行通配时要忽略的模式:
extglob
或使用out
选项明确排除shopt -s extglob; { ls && cat !(out) ;} >out
扩展名:
{{1}}
答案 1 :(得分:0)
您可以使用>>
(附加到文件)运算符解决此问题:
ls > out && cat * >> out
。
或括号:
(ls && cat *) > out
。