/bin/sh
Ubuntu下的默认shell()指向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
无法工作,因为将忽略hashbang行并且脚本将被解释dash
,这不支持该字符串替换语法.
/bin/sh
Ubuntu下的默认shell()指向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
无法工作,因为将忽略hashbang行并且脚本将被解释dash
,这不支持该字符串替换语法.
我有同样的问题.确保你的脚本没有
#!/bin/sh
在脚本的顶部.相反,你应该添加
#!/bin/bash
对于到达此处的其他人,当使用命令的env变量语法时,也会出现此确切消息,例如,${which sh}
而不是正确的$(which sh)
你的脚本语法是有效的bash和good.
失败的可能原因:
你bash
不是真正的bash,ksh
或者是其他一些不理解bash参数替换的shell.因为你的脚本看起来很好并且可以使用bash.做ls -l /bin/bash
并检查它真的是bash而不是sym链接到其他shell.
如果你的系统上有bash,那么你可能会以错误的方式执行你的脚本:ksh script.sh
或者sh script.sh
(你的默认shell不是bash).因为你有适当的shebang,如果你有bash ./script.sh
或bash ./script.sh
应该没事.
尝试使用bash命令显式运行脚本,而不是仅将其作为可执行文件执行.