Vraag Hulp nodig bij het doorgeven van argumenten van de opdrachtregel in bash


#function myfunc
myfunc(){
echo $1
case $1 in

    e)
            a=5
            ;;
    q)
            a=10
            ;;

esac
}

myfunc

Ik heb hulp nodig bij het volgen van:

$myfunc.sh e

echo $1 toont niets. case werkt ook niet. Wat doe ik verkeerd?


1
2017-08-03 18:38


oorsprong


Het probleem is, binnen de functie $ 1, $ 2, ... zijn functieargumenten niet de scriptargumenten, zie: stackoverflow.com/questions/3966048/... - Jason Conti
Om de opmerking van Jason op te volgen, is de oplossing myfunc "$@" - glenn jackman


antwoorden:


U bent vergeten om ten minste één parameter door te geven aan de myfunc functie wanneer u het belt. Dus jouw myfunc.sh script moet er als volgt uitzien:

#!/bin/bash

#function myfunc
myfunc(){
    echo $1
    case $1 in
        e) a=5 ;;
        q) a=10 ;;
        *) a='not e or q' ;;
    esac
    echo $a
}

myfunc $1   #in this case you can also use $@ or $* 

Meer over:


1
2017-08-06 18:13



Als u niet zeker bent van een variabele waarde (deze kan spaties bevatten), is het altijd beter om deze tussen aanhalingstekens te plaatsen, d.w.z. myfunc "$1" of myfunc "$@". - pabouk