首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么bash4扩展花括号的方式不同?

为什么bash4扩展花括号的方式不同?
EN

Stack Overflow用户
提问于 2017-03-16 22:21:55
回答 1查看 223关注 0票数 7

一个遗留系统升级到bash4,它的大多数脚本停止工作。我已经将范围缩小到如何在<(cmdA ...|cmdB ... file{1,2}|cmdZ ...)中扩展花括号。

为了更好地说明这种差异:

之前(bash 3.2.25):

代码语言:javascript
复制
[root@host1:~]$ bash -version|head -1
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
[root@host1:~]$ cat <(echo sort file{1,2})
sort file1
sort file2
[root@host1:~]$ join <(sed 's/\r//g;s/^[^:]*://' file{1,2}|LANG=C sort)
[root@host1:~]$

之后(bash 4.1.2):

代码语言:javascript
复制
[root@host2:~]$ bash --version|head -1
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
[root@host2:~]$ cat <(echo sort file{1,2})
sort file1 file2
[root@host2:~]$ join <(sed 's/\r//g;s/^[^:]*://' file{1,2}|LANG=C sort)
join: missing operand after `/dev/fd/63'
Try `join --help' for more information.
[root@host2:~]$ 

这是一个“硬编码”(和预期?)为bash4而做的改变?或者这个扩展的行为是由一些bash级别的设置(比如set -B/set +B)控制的,并且可以切换回旧/旧/bash 3模式吗?我宁愿更改一些shell范围的开关(而不是重写一堆脚本)。

如果这个(bash3)“特性”是在错误修复或改进过程中被切断的-我很惊讶,因为旧的(bash3)语法允许在输入时节省一吨.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-16 22:33:40

最初的行为是无文档化的(与包含在进程替换中的代码(如子subshell或类似上下文)的一般规则相反,解析方式与它在进程替换之外的行为方式相同。

因此,这是一个bug,而不是一个特性。这个错误是在bash-4.0-alpha中修复的。引用更改条目:

rr.支撑扩展现在允许进程替换不改变通过。

没有恢复此更改的运行时标志可用。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42845853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档