/ / ako preskočiť prvý argument pri spustení bash skriptu? - bash, unix

ako skákať prvý argument pri spustení bash skriptu? - bash, unix

Povedzme, že mám bash skript s dvoma voliteľnými argumentmi

Ako by som mohol spustiť skript poskytujúci vstup pre druhý argument, ale nie pre prvý argument?

odpovede:

4 pre odpoveď č. 1

Zoznam argumentov shellu je iba sekvencioustruny. Nie je možné definovať prvý reťazec a druhý definovať, ale ak máte kontrolu nad programom alebo osoba, ktorá ho napísala, predvídala tento scenár, možno podporuje odovzdanie prázdneho prvého argumentu alebo možno špecifický reťazec, ktorý sa interpretuje ako „nedefinovaný“.

Aby ste mohli prejsť prázdnym reťazcom, shell vám to umožníumiestniť dve susediace úvodzovky (ktoré budú odstránené shellom pred tým, ako bude argument predaný programu, ktorý práve spúšťate, spôsobom, ako sú ponuky spravované shellom všeobecne).

program "" second third fourth

Bežnou súvisiacou konvenciou je nechať osamelú alebo dvojitú pomlčku označovať „možnosť, ktorá nie je“.

program -- second third fourth

Ak máte kontrolu nad príkazom a jeho príkazomargumentácia (a nie je to už stmelené, pretože máte programy napísané inými ľuďmi, ktoré závisia od aktuálneho správania). Lepším návrhom by bolo urobiť voliteľný argument skutočne voliteľný, t.

program --uppercase string of arguments
program --lowercase STRING OF SHOUTING
program The arguments will be passed through WITHOUT case conversion

Implementácia je priama:

toupper () { tr "[:lower:]" "[:upper:]"; }
tolower () { tr "[:upper:]" "[:lower:]"; }
case $1 in
--uppercase) shift; toupper;;
--lowercase) shift; tolower;;
*) cat;;
esac <<<"$@"

Ak je to správanie je cementované, ďalšou cestou je vytvorenie príkazus iným menom s rovnakým správaním v jadre, ale s lepšou sémantikou príkazového riadku, a nakoniec vyradením starej verzie pomocou nemotorného spracovania argumentov.