2017-04-16 5 views
0

私は関数を呼び出しているが、その関数の変数$ Xは外に出ているような単純なコードに問題があります。なぜなら、出力メッセージは常に "Your interface is " ... 何か不足していますか?関数内の変数-Linuxシェルスクリプト

#! /bin/bash 
function choose 
{ 
echo -e " Choose your interface:" 
echo -e " 1) WLan0" 
echo -e " 2) WLan0mon" 
echo -e " Choose: " 
read -e X 
if [ "$X" = "1" ] 
then 
    X="wlan0" 
elif [ "$X" = "2" ] 
then 
    X="wlan0mon" 
fi 
} 


(choose) 
echo -e "Your interface is $X." 
+0

'X'はあなたの' choose'関数のスコープの内部にのみ存在すると思います。関数定義/呼び出しをすべて削除するか、 'choose'関数の本体の中で' echo'を動かしてみてください。 – Mark

答えて

2

(choose)を実行すると、かっこを使用してサブシェルで実行されます。 Advanced Bash-Scripting Guideから

:サブシェルにおける

変数はサブシェル内のコードのブロック外に見えません。それらは、親プロセスからサブシェルを起動したシェルにアクセスすることはできません。実際にはローカル変数です。 chooseの周りに括弧を削除

はあなたのechoからX変数が見えるようになります。

関連する問題