#!/bin/bash
jobname="job_201312161447_0003"
jobname_pre=${jobname:0:16}
jobname_post=${jobname:17}
这个bash脚本在ubuntu上给了我糟糕的替换错误。任何帮助都将不胜感激。
#!/bin/bash
jobname="job_201312161447_0003"
jobname_pre=${jobname:0:16}
jobname_post=${jobname:17}
这个bash脚本在ubuntu上给了我糟糕的替换错误。任何帮助都将不胜感激。
当前回答
对于到达这里的其他命令,当使用env变量语法执行命令时,也会出现相同的消息,例如${which sh}而不是正确的$(which sh)
其他回答
与您的示例无关,但是对于Bash无法识别的任何替换语法,您也可以在Bash中获得Bad替换错误。这可能是:
流浪的空白。例如bash -c '${x}' 一个错字。例如bash -c '${x;-}' 在后来的Bash版本中添加的一个特性。例如bash 4.4之前的bash -c '${x@Q}'。
如果在同一个表达式中有多个替换,Bash在确定有问题的表达式时可能没有多大帮助。例如:
$ bash -c '"${x } multiline string
$y"'
bash: line 1: ${x } multiline string
$y: bad substitution
在我的例子中(在ubuntu 18.04下),我混合了$(${}),工作正常:
BACKUPED_NB=$(ls ${HOST_BACKUP_DIR}*${CONTAINER_NAME}.backup.sql.gz | wc --lines)
完整的例子。
我也有同样的问题。确保你的脚本没有
#!/bin/sh
在你的脚本顶部。相反,你应该补充
#!/bin/bash
我使用#!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 #
您的脚本语法是有效的bash和良好的。
故障可能原因:
Your bash is not really bash but ksh or some other shell which doesn't understand bash's parameter substitution. Because your script looks fine and works with bash. Do ls -l /bin/bash and check it's really bash and not sym-linked to some other shell. If you do have bash on your system, then you may be executing your script the wrong way like: ksh script.sh or sh script.sh (and your default shell is not bash). Since you have proper shebang, if you have bash ./script.sh or bash ./script.sh should be fine.