#!/bin/bash

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

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


当前回答

对于到达这里的其他命令,当使用env变量语法执行命令时,也会出现相同的消息,例如${which sh}而不是正确的$(which sh)

其他回答

尝试使用bash命令显式地运行脚本,而不是将其作为可执行文件执行。

在我的例子中(在ubuntu 18.04下),我混合了$(${}),工作正常:

BACKUPED_NB=$(ls ${HOST_BACKUP_DIR}*${CONTAINER_NAME}.backup.sql.gz | wc --lines)

完整的例子。

我在bash中使用花括号在表达式中添加了两次美元符号:

cp -r $PROJECT_NAME ${$PROJECT_NAME}2

而不是

cp -r $PROJECT_NAME ${PROJECT_NAME}2

您的脚本语法是有效的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.

看起来“+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