我已经尝试了很多,但无法从中找到解决方案。我有一个简单的脚本:
#! /bin/sh
o="12345"
a=o
b=${!a}
echo ${a}
echo ${b}
执行
$ . scp.sh
它会在没有错误的情况下产生正确的输出,但是当执行时:
$ ./scp.sh
它产生
./scp.sh:4:./scp.sh:不良替代
为什么发生这种情况的任何想法。
我被建议使用bash模式,并且效果很好。但是,当我通过python执行相同的脚本(将脚本标头更改为bash)时,我会遇到相同的错误。
我从python称其为:
import os
os.system(". ./scp.sh")
尝试使用:
#!/bin/bash
而不是
#! /bin/sh
此错误的原因是在这些情况下使用了两个不同的外壳。
$ . scp.sh
命令将使用当前的壳(bash
)执行脚本(不拨打子壳)。
$ ./scp.sh
命令将使用脚本的HashBang行中指定的外壳。就您而言,它是sh
或dash
。
最简单的方法是用#!/bin/bash
替换第一行(或任何路径bash
中的任何路径)。