Bash Unix脚本-字符串的第一个字母

Bash Unix脚本-字符串的第一个字母,bash,unix,terminal,Bash,Unix,Terminal,当我运行以下脚本时: #!/bin/bash test="abcdr" test2=${test:0:2} echo $test2 我得到错误:script:3:script:Bad substitution 但是我在终端中输入了完全相同的命令,它工作正常,没有任何错误 为什么会发生这种情况?我如何修复它?您正在使用sh运行脚本,这与bash不同。它不支持这种类型的替换。 使用 bash script 或者确保它是可执行的(chmodu+x/path/to/script),并直接运行它 /

当我运行以下脚本时:

#!/bin/bash 
test="abcdr"
test2=${test:0:2}
echo $test2
我得到错误:
script:3:script:Bad substitution

但是我在终端中输入了完全相同的命令,它工作正常,没有任何错误


为什么会发生这种情况?我如何修复它?

您正在使用
sh
运行脚本,这与
bash
不同。它不支持这种类型的替换。 使用

bash script
或者确保它是可执行的(
chmodu+x/path/to/script
),并直接运行它

/path/to/script
如果当前目录恰好是
/path/to
,则只需键入

./script

@user3597432我在脚本内容中没有看到任何问题,主要问题可能是bash版本或脚本如何执行。如果您不能通过bash终端解决问题,您可以尝试KornShell(如果可能的话),这更方便。只需将ksh bin和脚本文件引用到.ksh即可。ksh提供了调试选项executewithksh-xscript.ksh。

如何运行脚本?
bash
是否在
/bin/bash
中?(检查
哪个bash
)。如何运行脚本?@user3597432将其设置为可执行(
chmod u+x script
)并像
/script
一样运行或像
bash script
一样运行
sh
不支持子字符串。这就是问题所在,在执行
sh脚本
时,您正在使用
sh
来解释它,而shell不接受此替换。相反,使用
/script
执行,将得到
/bin/bash
@jaypal谢谢,就是这样