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

このエラーの理由は、これらのケースで 2 つの異なるシェルが使用されているためです。

$ . scp.shコマンドは、現在のシェル ( bash) を使用してスクリプトを実行します (サブシェルをフォークせずに)。

$ ./scp.shコマンドは、スクリプトの hashbang 行で指定されたシェルを使用します。そしてあなたの場合、それはどちらかですshまたはdash.

#!/bin/bashそれを回避する最も簡単な方法は、最初の行を(またはパスが入っているものは何でも)に置き換えることですbash

于 2012-11-07T18:43:28.093 に答える