Linux bash脚本中存在错误的替换错误

Linux bash脚本中存在错误的替换错误,linux,bash,shell,syntax-error,Linux,Bash,Shell,Syntax Error,我试了很多,但都没有找到解决办法。我有一个简单的脚本: #! /bin/sh o="12345" a=o b=${!a} echo ${a} echo ${b} 当像这样执行时 $ . scp.sh 它生成正确的输出,没有错误,但执行时如下所示: $ ./scp.sh 它产生 ./scp.sh:4:./scp.sh:替换错误 你知道为什么会这样吗 有人建议我使用bash模式,效果很好。但是,当我通过Python执行相同的脚本时(将脚本头更改为bash),我得到了相同的错误 我从Pytho

我试了很多,但都没有找到解决办法。我有一个简单的脚本:

#! /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

此错误的原因是在这些情况下使用了两个不同的壳

$。sh
命令将使用当前shell(
bash
)来执行脚本(无需派生子shell)

$./scp.sh
命令将使用脚本的hashbang行中指定的shell。在你的例子中,它不是
sh
就是
dash


最简单的解决方法是将第一行替换为
#/bin/bash
(或bash所在的任何路径)。

谢谢。工作正常。但是,如果我通过python执行相同的脚本(更改为bash模式),我会得到相同的错误。我现在正在编辑这个问题。从python开始,而不是做os.system(“scp.sh”),尝试做os.system(“bash scp.sh”),看看如果我只指定os.system(“./scp.sh”)它是否有效。我不明白为什么os.system(“../scp.sh”)不能工作。虽然我的环境中$SHELL是/bin/SHELL,所以它应该使用bash而不是sh,而且我现在也将脚本头更改为bash。很可能“./scp.sh”正在生成用户的默认SHELL(我打赌在您的情况下是“sh”)并在该SHELL中运行“./scp.sh”,而“.scp.sh”并没有这样做,试着在strace下运行您的进程,看看发生了什么许多语言专门使用“/bin/sh”作为“system()”命令的shell。我打赌python会这样做(查看文档)。这可能会起作用:
系统(“./scp.sh”)
在您将shebang切换到
之后/bin/bash
能否显示python脚本中用于执行此操作的行?@raina77ow我已经编辑了这个问题。谢谢