Fish Shell:
Commandoregelargumenten lezen

Hoe:

Stel greet.fish is je script. Je wilt dat het een naam neemt en een begroeting uitspuwt.

#!/usr/bin/env fish

# De argumenten worden opgeslagen in $argv
# $argv[1] is het eerste argument, $argv[2] het tweede, en zo verder.

set name $argv[1]
echo "Hallo, $name!"

Voer het uit:

$ fish greet.fish Wereld
Hallo, Wereld!

Nu, met meerdere argumenten:

#!/usr/bin/env fish

# Doorloop alle argumenten
for arg in $argv
    echo "Hallo, $arg!"
end

Probeer het:

$ fish greet.fish Aarde Mars Venus
Hallo, Aarde!
Hallo, Mars!
Hallo, Venus!

Om vlaggen te hanteren (zoals -u voor hoofdletters):

#!/usr/bin/env fish

# Controleer op een "-u" argument
set -l uppercase_mode uit
for arg in $argv
    if test "$arg" = "-u"
        set uppercase_mode aan
    else if set -q uppercase_mode[1]; and string match --quiet -- "$uppercase_mode" "aan"
        echo (string upper "$arg")
    else
        echo $arg
    end
end

En roep aan:

$ fish greet.fish -u mercurius venus
MERCURIUS
VENUS

Diepere duik

Fish Shell heeft al lange tijd command line argumenten goed onder de knie, net als andere shells. Wat Fish onderscheidt, is zijn eenvoud door ontwerp. Er zijn geen $1, $2... $n om te onthouden; het is een array $argv, bekend terrein als je in andere programmeertalen duikt.

Er zijn alternatieven, zoals bash, zsh, enz., maar de scripttaal van Fish streeft ernaar leesbaarder en eenvoudiger te zijn. In plaats van traditionele shift commando’s of te maken hebben met $@ voor alle argumenten, heeft Fish dat vriendelijke $argv en mooie scriptconstructies zoals for lussen en if condities die minder over cryptische symbolen gaan en meer over duidelijke woorden.

Bij de implementatie is het van vitaal belang om te overwegen hoe je script gebruikt zal worden. Zijn er standaardwaarden nodig? Zullen gebruikers weten wat ze moeten invoeren? Zorg ervoor dat je gevallen aanpakt waar gebruikers vergeten argumenten door te geven of ze in de verkeerde volgorde passeren.

Zie ook