#!/bin/bash

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

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


当前回答

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

其他回答

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

另外,确保脚本的第一行没有空字符串。

即确保#!/bin/bash是脚本的第一行。

两者- bash或dash -工作,但语法需要:

FILENAME=/my/complex/path/name.ext
NEWNAME=${FILENAME%ext}new

与您的示例无关,但是对于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

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