我已经尝试了很多,但无法从中获得解决方案。我有一个简单的脚本:
#! /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")
答案 0 :(得分:9)
尝试使用:
#!/bin/bash
而不是
#! /bin/sh
答案 1 :(得分:7)
此错误的原因是在这些情况下使用了两个不同的shell。
$ . scp.sh
命令将使用当前shell(bash
)来执行脚本(不需要子shell)。
$ ./scp.sh
命令将使用脚本的hashbang行中指定的shell。在您的情况下,它可以是sh
或dash
。
最简单的方法是用#!/bin/bash
(或bash
所在的路径替换第一行)。