Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Bash-Programmierung

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Sonstiges
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
ironice
Gast





BeitragVerfasst am: 05. Apr 2004 21:00   Titel: Bash-Programmierung

Guten Abend,
ich habe folgendes gedankliches Problem.
Wie bekannt sein dürfte is ja $1 bei Bash-Skripts der Name des ersten übergebenen Arguments.
Jedoch wird genau dieses $1 bei einem Aufruf in einer Funktion innerhalb des Skripts (einlesen eines Wertes auf $1 in der Fkt. // Aufruf der Funktion mit Paramter VAR1) komischerweise nicht überschrieben sondern bleibt in ihrer ursprünglichen Form erhalten.

Wieso dieses Verhalten ? Wird innerhalb des Funktionsaufrufes eine eigene Variable $1 erstellt oder wird die ursprüngliche $1 im Stack gespeichert und nach der Funktion zurückgeschrieben ? *verwirrt bin*

Würde mich über Erklärungen (auch Erklärungsversuche) freuen..

mfg
ironice

-------------------------------------
kurzes Bsp.-Skript (mit Parameter aufrufen) :

#!/bin/bash
get()
{
echo "Wert für $1 angeben : "
read $1
}

get VAR1
echo $VAR1
echo $1
 

Jochen
Gast





BeitragVerfasst am: 05. Apr 2004 21:40   Titel: Re: Bash-Programmierung

> Wird innerhalb des Funktionsaufrufes eine eigene Variable $1 erstellt oder wird die ursprüngliche $1 im Stack gespeichert und nach der Funktion zurückgeschrieben ?

Nun frag mich nicht, ob das über'n Stack oder Namespaces gelöst wird, aber so ist es: Funktionen bekommen ihre Argumente über $1, $2, ... mitgegeben, welche dann Funktions-lokal sind. Das funktionierte sogar schon in der alten Bourne-Shell. Weitere Funktions-lokale Variablen kannst Du in der bash mittels "local" oder "typeset" definieren (was die alte sh aber schon nicht mehr konnte, weswegen Shellfunktionen dort wegen Nebeneffektgefahr fast unbrauchbar waren). Die Argumente des Skriptes werden dadurch nicht beeinflusst. In der bash-Manpage kannst Du nachlesen, welche Variablen alle lokal gehalten werden. Wenn ich mich recht erinnere, sind das aber nur $0 (Name der Funktion), $# (Anzahl Funktionsparameter) und $1 bis eval '${'$#'}'.

Jochen
 

Scory
Gast





BeitragVerfasst am: 06. Apr 2004 19:43   Titel: Re: Bash-Programmierung

>Wird innerhalb des Funktionsaufrufes eine eigene Variable $1

Der Kandidat hat 100 Punkte.
 

U. Maslo
Gast





BeitragVerfasst am: 06. Apr 2004 23:00   Titel: Re: Bash-Programmierung

Wenn Du ähnliches wirklich benötigst, vielleicht etwa so:


#!/bin/bash

get_var()
{
eval 'read -p "Gib was ein: " $1'
}

get_var VAR

echo "VAR: ${VAR}"

get_var2()
{
local VAR
read -p "Gib noch was ein: " VAR
echo "$VAR"
}

VAR2=$(get_var2)
echo "VAR2: ${VAR2}"
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Sonstiges Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy