3

このコマンドは、必要な出力で正常に実行できます。

ifconfig eth0 | grep HWaddr | awk '{print $5}'

ただし、コマンドを変数に設定して変数を出力すると、エラーが発生します。

CASS_INTERNAL=`ifconfig eth0 | grep HWaddr | awk '{print \$5}'`
$CASS_INTERNAL

my internal xxx ip: command not found

奇妙なことに、私の内部IPが実際に表示されます。エラーが発生しないようにするにはどうすればよいですか?それは問題ではないはずですが、私は最新バージョンのUbuntuを使用しています。

4

5 に答える 5

4

変数を出力するのではなく、コマンド名として実行します。あなたが探しています

echo "$CASS_INTERNAL"

(変数の置換を常に二重引用符で囲む習慣を身に付けてください。)

より高度なシェルノート:この場合は問題ではありませんが、一般にechoいくつかの特殊文字(-および\\)で問題が発生する可能性があるため、次のより複雑で完全に信頼できるコマンドを使用することをお勧めします。

printf "%s\n" "$CASS_INTERNAL"
于 2010-07-20T22:39:40.780 に答える
4

使用する必要はありませんgrep

ifconfig eth0 | awk '/HWaddr/{print $5}'
于 2010-07-20T23:57:39.257 に答える
3
CASS_INTERNAL=`ifconfig eth0 | grep HWaddr | awk '{print \$5}'`
echo $CASS_INTERNAL

あなたの:

$CASS_INTERNAL

コマンドとして実行しようとします。

于 2010-07-20T22:36:35.450 に答える
1

あなたは多分したいですか

echo $CASS_INTERNAL
于 2010-07-20T22:38:20.710 に答える
0

まず、HWaddrをgrepするので、この行の5番目のフィールドは、問題のネットワークアダプターのMACアドレスであり、ローカルIPアドレスではありません。

他の人は、解決策は単に結果をエコーすることであると示唆しています。つまり、この例のeth0が、行が実行される時点で使用できない場合、それは機能しません。

私が理解していることから、代わりに目的のコマンドラインを変数に入れて、後でそれを評価したいと思います。このパターンは一般に遅延評価と呼ばれ、 eval組み込みを使用してbashで可能になります。

#put the desired command in variable
CASS_INTERNAL='ifconfig eth0 | grep HWaddr | awk "{print \$5}"'

# ....

#at later on - evaluate its contents!
eval $CASS_INTERNAL
11:22:33:aa:bb:cc
于 2010-07-20T23:24:02.180 に答える