#!/bin/bash

jobname="job_201312161447_0003"
jobname_pre=${jobname:0:16}
jobname_post=${jobname:17}

这个bash脚本在ubuntu上给了我糟糕的替换错误。任何帮助都将不胜感激。


当前回答

看起来“+x”会导致问题:

root@raspi1:~# cat > /tmp/btest
#!/bin/bash

jobname="job_201312161447_0003"
jobname_pre=${jobname:0:16}
jobname_post=${jobname:17}
root@raspi1:~# chmod +x /tmp/btest
root@raspi1:~# /tmp/btest
root@raspi1:~# sh -x /tmp/btest
+ jobname=job_201312161447_0003
/tmp/btest: 4: /tmp/btest: Bad substitution

其他回答

我发现这个问题要么是由标记的答案引起的,要么是在bash声明之前有一行或空格

我也有同样的问题。确保你的脚本没有

#!/bin/sh 

在你的脚本顶部。相反,你应该补充

#!/bin/bash

看起来“+x”会导致问题:

root@raspi1:~# cat > /tmp/btest
#!/bin/bash

jobname="job_201312161447_0003"
jobname_pre=${jobname:0:16}
jobname_post=${jobname:17}
root@raspi1:~# chmod +x /tmp/btest
root@raspi1:~# /tmp/btest
root@raspi1:~# sh -x /tmp/btest
+ jobname=job_201312161447_0003
/tmp/btest: 4: /tmp/btest: Bad substitution

Ubuntu下的默认shell (/bin/sh)指向dash,而不是bash。

me@pc:~$ readlink -f $(which sh)
/bin/dash

所以如果你chmod +x your_script_file.sh,然后用。/your_script_file.sh运行它,或者如果你用bash your_script_file.sh运行它,它应该工作得很好。

使用sh your_script_file.sh运行它将不起作用,因为散列行将被忽略,脚本将由dash解释,dash不支持字符串替换语法。

我使用#!Bin /bash也尝试了所有的方法,比如在#! Bin /bash之前或之后没有行。 然后又尝试使用+x,但仍然没有工作。 最后我试着运行脚本./script.sh,它工作得很好。

#!/bin/bash
jobname="job_201312161447_0003"
jobname_post=${jobname:17}

root@ip-10-2-250-36:/home/bitnami/python-module/workflow_scripts# sh jar .sh juru .sh: 3: juru .sh:糟糕的替换

root@ip-10-2-250-36: / home / bitnami python-module / workflow_scripts / sh -照顾。 root@ip-10-2-250-36: / home / bitnami python-module / workflow_scripts #