Linux 如何加上「;shopt-s compat31“;所有shell脚本中的命令?

Linux 如何加上「;shopt-s compat31“;所有shell脚本中的命令?,linux,bash,Linux,Bash,Bash包从Bash-3.2-32更新为Bash-4.1.2-15.el6_5.1.x86_64。升级后,正则表达式匹配条件运算符=~可以通过正则表达式匹配停止工作。如何添加 shopt -s compat31 所有shell脚本中的命令?我不想在所有脚本中逐个添加此命令 我已将上述命令添加到.bashrc中,但shell脚本上并没有反映兼容性。 命令结果: compat31 is off in script. [root@localhost log]# sh abc.sh compat31

Bash包从Bash-3.2-32更新为Bash-4.1.2-15.el6_5.1.x86_64。升级后,正则表达式匹配条件运算符=~可以通过正则表达式匹配停止工作。如何添加

shopt -s compat31
所有shell脚本中的命令?我不想在所有脚本中逐个添加此命令

我已将上述命令添加到.bashrc中,但shell脚本上并没有反映兼容性。 命令结果:

compat31 is off in script.
[root@localhost log]# sh abc.sh
compat31        off

Compat31 is  on at command prompt screen.
[root@localhost log]# shopt |grep compat31
compat31        on
[root@localhost log]#
一些意见:

  • 正则表达式操作符,但我看不到对其后任何更改的引用。换句话说,在您提到的版本之间没有提到更改
  • 3.2alpha中
    =~
    行为的变化只是将引用的右字符串视为文本字符串匹配,而不是正则表达式。实际上,您只需删除其中的任何引号,即可使旧代码与3.2alpha一起工作
  • regex操作符仍然在工作,很可能比3.1中的更好
  • 除非您绝对无法更改代码,否则最好与当前版本兼容。过多地迎合旧代码会使以后的迁移变得更加困难,并且更可能出现细微的错误

一个选项是使用

bash -O compat31 oldscript.bash

而不是编辑脚本本身。

您可以将
/bin/bash
更改为脚本的符号链接,该脚本运行
shopt-s compat31
,然后调用
bash
。我不知道这会有多好,也不知道在这个过程中会有什么问题。根据您的说法,我们首先创建从/bin/bash到script的符号链接。示例:ln-s/bin/bash abc.sh。sh运行shopt命令。是否正确?您必须以某种方式编辑脚本;shell选项不会传播到子shell,例如当从带有选项集的shell运行脚本时。默认情况下,RHEL6.5计算机是use bash-4.1.2-15.el6_5.1.x86_64版本。那么,如何处理compat31的兼容性呢?是否有针对bash4.1.2包的解决方案来启用compat31?有多个脚本,可以在内部调用其他脚本。那么,如何为所有脚本处理相同的问题。