Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
脚本路径="${BASH_SOURCE[0]}";不良替代_Bash_Variables - Fatal编程技术网

脚本路径="${BASH_SOURCE[0]}";不良替代

脚本路径="${BASH_SOURCE[0]}";不良替代,bash,variables,Bash,Variables,在Centos上,我的脚本运行良好。但在Debian Squeeze上,当我运行脚本时,我得到: cpfailover.sh: 30: Bad substitution 一行字写着: SCRIPT_PATH="${BASH_SOURCE[0]}"; 即使在这里,我也在许多示例中看到,这是一个正确的行号。问题出在哪里。您使用的是/bin/sh?在Debian压缩上,/bin/sh是指向/bin/dash的符号链接,它不支持${array[0]}将代码更改为 SCRIPT_PATH=$0; 而

在Centos上,我的脚本运行良好。但在Debian Squeeze上,当我运行脚本时,我得到:

cpfailover.sh: 30: Bad substitution
一行字写着:

SCRIPT_PATH="${BASH_SOURCE[0]}";

即使在这里,我也在许多示例中看到,这是一个正确的行号。问题出在哪里。

您使用的是
/bin/sh
?在Debian压缩上,
/bin/sh
是指向
/bin/dash
的符号链接,它不支持
${array[0]}

将代码更改为

SCRIPT_PATH=$0;
而不是

SCRIPT_PATH="${BASH_SOURCE[0]}";

你能用“$0”代替
${BASH_SOURCE[0]}
?当然它们应该是相同的。@khachik:
${BASH_SOURCE[@]}
是为了调试而在BASH 3.0中引入的。它的意思与
$0
不同。根据Bash手册,
${Bash_SOURCE[@]}
中的元素是与
${FUNCNAME[@]}
中的元素对应的源文件名。更新系统以使用旧的bash而不是dash,并且工作正常。由于您的脚本依赖于bash特定的功能,我建议您显式使用/bin/bash。您能否解释一下为什么您觉得
$0
${bash_SOURCE[0]}
更好?它与POSIX/bin/sh兼容,其中${bash_SOURCE[0]}只在bash中工作。通常,如果您不是针对多个体系结构或旧操作系统,您应该将shebang切换到#/bin/bash,因此您可以使用bash的所有功能。请记住,MacOSX附带Bash3.2,因此如果您以它为目标,就不能使用bash-4的功能。