#!/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)
其他回答
另外,确保脚本的第一行没有空字符串。
即确保#!/bin/bash是脚本的第一行。
对于到达这里的其他命令,当使用env变量语法执行命令时,也会出现相同的消息,例如${which sh}而不是正确的$(which sh)
在我的例子中(在ubuntu 18.04下),我混合了$(${}),工作正常:
BACKUPED_NB=$(ls ${HOST_BACKUP_DIR}*${CONTAINER_NAME}.backup.sql.gz | wc --lines)
完整的例子。
两者- bash或dash -工作,但语法需要:
FILENAME=/my/complex/path/name.ext
NEWNAME=${FILENAME%ext}new
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不支持字符串替换语法。