当前位置: 首页>>技术教程>>正文


string – bash:替换错误

, , ,

问题描述

#!/bin/bash

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

这个bash脚本给我在Ubuntu上的”错误替换”错误。任何帮助将不胜感激。

最佳办法

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解释,该脚本不支持该字符串替换语法。

次佳办法

我有同样的问题。确保您的脚本没有

#!/bin/sh 

在脚本的顶部。相反,您应该添加

#!/bin/bash

第三种办法

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

第四种办法

您的脚本语法是有效的bash并且很好。

失败的可能原因:

  1. 您的bash不是真正的bash,而是ksh或其他不了解bash参数替换的 shell 。因为您的脚本看起来不错,并且可以与bash一起使用。进行ls -l /bin/bash并检查它确实是bash,而不是sym-linked。

  2. 如果您的系统上确实有bash,则您可能会以错误的方式执行脚本,例如:ksh script.shsh script.sh(并且您的默认shell不是bash)。由于您具有适当的射手,如果您有狂热的话,./script.shbash ./script.sh应该没问题。

第五种办法

尝试使用bash命令显式运行脚本,而不是仅以可执行文件身份执行。

第六种办法

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

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/7941.html,未经允许,请勿转载。