bash substring在解释器模式下工作,但不在shell脚本中工作

时间:2015-10-15 16:38:35

标签: linux bash shell aix

当我尝试在解释器模式下在bash shell中执行子字符串时,我得到了预期的输出

bash-4.2$ x="SomeString"
bash-4.2$ echo $x
SomeString
bash-4.2$ y=${x:0:4}
bash-4.2$ echo $y
Some
bash-4.2$

而在shell脚本中运行相同的命令时,我收到错误。

bash-4.2$ cat shell.sh
x="SomeString"
echo $x
y=${x:0:4}
echo $y

bash-4.2$ sh shell.sh
SomeString
shell.sh[3]: y=${x:0:4}: 0403-011 The specified substitution is not valid for this command.
bash-4.2$

具有讽刺意味的是,当我通过bash-4.2$ ./shell.sh调用shell时,它正在工作。

这里发生了什么?

我在 AIX 计算机上。

1 个答案:

答案 0 :(得分:3)

子字符串是bash扩展名。当您将其作为sh运行时,它会禁用此扩展程序。使用bash shell.sh即可使用。

您还应该将#!/bin/bash放在脚本的开头,以确保当您将其作为命令调用时,它与bash一起运行。