2017-04-16 4 views
0

Ich habe ein Problem mit diesem einfachen Code, wo ich eine Funktion aufrufen, aber die Variable $ X dieser Funktion scheint nicht nach draußen zu gehen, da die Druckmeldung immer "Ihre Schnittstelle ist . " ... Fehle ich etwas?Variable innerhalb von Funktionen-Linux Shell Script

#! /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

Ich denke 'X' existiert nur im Rahmen Ihrer' Choose' Funktion. Versuchen Sie entweder, die Funktionsdefinition/den Aufruf vollständig zu entfernen oder das 'echo' in den Körper der Funktion' choose' zu ​​verschieben. – Mark

Antwort

2

Das Ausführen von (choose) mit den Klammern führt es in einer Untershell aus.

Von Advanced Bash-Scripting Guide:

Variablen in einer Subshell sind außerhalb des Blocks von Code in der Sub-Shell nicht sichtbar. Sie sind für den übergeordneten Prozess nicht zugänglich, für die Shell, die die Subshell gestartet hat. Dies sind in der Tat lokale Variablen.

die Klammern um choose entfernen, werden auf Ihre echo Variable X sichtbar machen.