bash脚本中的替换错误

时间:2012-11-07 18:36:34

标签: 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)时,我遇到了同样的错误。

我用Python称它为:

import os
os.system(". ./scp.sh")

2 个答案:

答案 0 :(得分:9)

尝试使用:

#!/bin/bash

而不是

#! /bin/sh

答案 1 :(得分:7)

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

$ . scp.sh命令将使用当前shell(bash)来执行脚本(不需要子shell)。

$ ./scp.sh命令将使用脚本的hashbang行中指定的shell。在您的情况下,它可以是shdash

最简单的方法是用#!/bin/bash(或bash所在的路径替换第一行)。