#!/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上给了我糟糕的替换错误。任何帮助都将不胜感激。
当前回答
在我的例子中(在ubuntu 18.04下),我混合了$(${}),工作正常:
BACKUPED_NB=$(ls ${HOST_BACKUP_DIR}*${CONTAINER_NAME}.backup.sql.gz | wc --lines)
完整的例子。
其他回答
在我的例子中(在ubuntu 18.04下),我混合了$(${}),工作正常:
BACKUPED_NB=$(ls ${HOST_BACKUP_DIR}*${CONTAINER_NAME}.backup.sql.gz | wc --lines)
完整的例子。
我也有同样的问题。确保你的脚本没有
#!/bin/sh
在你的脚本顶部。相反,你应该补充
#!/bin/bash
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不支持字符串替换语法。
与您的示例无关,但是对于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中使用花括号在表达式中添加了两次美元符号:
cp -r $PROJECT_NAME ${$PROJECT_NAME}2
而不是
cp -r $PROJECT_NAME ${PROJECT_NAME}2