Předpokládejme, že mám grafický program s názvem app
. Příklad použití:app -t 'first tab' -t 'second tab'
otevře v tomto programu dvě „karty“.
Otázka zní:jak mohu provést příkaz (tj. app
) z bash
skript, pokud se počet argumentů může lišit?
Zvažte toto:
#!/bin/bash
tabs=(
'first tab'
'second tab'
)
# Open the app (starting with some tabs).
app # ... How to get `app -t 'first tab' -t 'second tab'`?
Chtěl bych, aby výše uvedený skript měl efekt ekvivalentní app -t 'first tab' -t 'second tab'
. Jak lze napsat takový bash skript?
Edit:Všimněte si, že otázka se ptá na skládání argumentů příkazového řádku za běhu pomocí řady argumentů.
Přijatá odpověď:
Zadání argumentů z pole je snadné, "${array[@]}"
expanduje na položky pole jako odlišná slova (argumenty). Potřebujeme pouze přidat -t
vlajky. Abychom to udělali, můžeme zacyklit první pole a vytvořit další pole pro úplný seznam argumentů přidáním -t
flags as we go:
#!/bin/bash
tabs=("first tab" "second tab")
args=()
for t in "${tabs[@]}" ; do
args+=(-t "$t")
done
app "${args[@]}"
Použijte "[email protected]"
místo "${tabs[@]}"
převzít argumenty příkazového řádku skriptu namísto pevně zakódovaného seznamu.