質問
このコマンドは正常に実行でき、必要な出力が得られます。
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 を使用しています。
解決
まず HWaddr を grep するので、この行の 5 番目のフィールドは、ローカル IP アドレスではなく、問題のネットワーク アダプタの MAC アドレスになります。
他の人は、解決策は単純に結果をエコーすることだと提案しています。つまり、この例の eth0 がその行が実行される時点で利用できない場合、機能しません。
私が理解しているところによると、代わりに目的のコマンドラインを変数に入れてから評価したいと考えています それ 後で。このパターンは一般的に呼ばれています 遅延評価, 、作られています 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
他のヒント
変数を出力するのではなく、コマンド名として実行します。あなたが探しています
echo "$CASS_INTERNAL"
(変数置換を常に二重引用符で囲む習慣をつけましょう。)
より高度なシェルノート:この場合は問題ありませんが、一般的には echo
一部の特殊文字では問題が発生する可能性があります (-
そして \\
)、そのため、次のより複雑ですが完全に信頼性の高いコマンドを使用することをお勧めします。
printf "%s\n" "$CASS_INTERNAL"
使用する必要はありません grep
ifconfig eth0 | awk '/HWaddr/{print $5}'
CASS_INTERNAL=`ifconfig eth0 | grep HWaddr | awk '{print \$5}'`
echo $CASS_INTERNAL
あなたの:
$CASS_INTERNAL
コマンドとして実行してみます。
もしかして欲しいですか
echo $CASS_INTERNAL
所属していません StackOverflow