4

我已经尝试了很多,但无法从中得到解决方案。我有一个简单的脚本:

#! /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")
4

2 回答 2

9

尝试使用:

#!/bin/bash

代替

#! /bin/sh
于 2012-11-07T18:41:01.873 回答
7

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

$ . scp.shcommand 将使用当前的 shell ( bash) 来执行脚本(不分叉子 shell)。

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

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

于 2012-11-07T18:43:28.093 回答