Funktioner och argument
En funktion kan ta emot inkommande argument. När man anropar funktionen så skickar man med argumenten och baserat på dem kan funktionen returnera olika resultat.
Låt oss se hur det går till.
#Argument
När man definierar en funktion så kan man även definiera om den skall ta argument. Bash hanterar antalet argument lite annorlunda än vad vi kanske är vana vid. Vi börjar med att skriva om föregående funktion så vi skickar med $USER
och använder den inuti funktionen:
#!/usr/bin/env bash
#
# An example script on functions with arguments
# Create function
function presentation {
echo "Hello $1"
}
# Call function with argument
presentation "$USER"
De inskickade argumenten sparas undan i $1, $2, $3
osv i den ordningen vi skickar in dem. Vi tittar lite på hur vi kan jobba med just dem.
#Hantera flera argument
#!/usr/bin/env bash
#
# An example script on functions with multiple arguments
function arguments {
# Get first argument
echo "First argument: $1"
# Get second argument
echo "Second argument: $2"
# Get all arguments
echo "All arguments: $*"
# Get amount of arguments
echo "Amount of arguments: $#"
}
arguments "I am first!" "I am not third!" 42
Notera att vi även här använder *
istället för @
när vi vill ha alla argument. Vi vill ju enbart skriva ut dem här, med andra ord använda dem som en sträng. Vi tittar på skillnaden mellan *
och @
:
#!/usr/bin/env bash
#
# An example script on functions with multiple arguments
# $* saves the arguments as one string
function arguments {
for arg in "$*"
do
echo "$arg"
done
}
arguments 42 34 3 1
# Prints:
# 42 34 3 1
Alla argument sparas som en sträng. $@
däremot sparar alla argument som individuella strängar:
#!/usr/bin/env bash
#
# An example script on functions with multiple arguments
# $@ saves the arguments as separated strings
function arguments {
for arg in "$@"
do
echo "$arg"
done
}
arguments 42 34 3 1
# Prints:
# 42
# 34
# 3
# 1
Om vi tar bort citationstecknen runt $@
och $*
fungerar de likadant, dock är det inte optimalt.
#Revision history
- 2019-03-08: (A, lew) Första versionen.