Přemýšlel jsem o jednoduchých závorkách v bash. Vím, že se používají pro provádění příkazů v podshellech a že se používají k vytváření polí, ale používají se k něčemu jinému?
Jedna věc, která mě zaujala, je, že když použijete přiřazení proměnné in, jako
var=(hello)
echo $var # hello
bash negeneruje chybu ani nic jiného a výstup je stejný jako if
var=hello
Jsou tyto dvě definice proměnných stejné nebo existuje rozdíl?
Přijatá odpověď:
Ve vašem případě závorka ()
se používají jako definice pole, například
a=(one two three) # array definition
echo "${a}" # print first element of array a
echo "${a[0]}" # print first element of array a
echo "${a[1]}" # print *second* element of array a
echo "${#a[@]}" # print number of elements in array a
Pokud do pole vložíte jednu proměnnou, máte pouze pole s jedním prvkem.
Abych odpověděl na vaši další otázku, zda se závorky používají také pro něco jiného:v bash
existuje mnoho situací že v kombinaci s jinými znaky je lze použít jako:
- náhrada příkazu:
$()
- záměna procesu:
<()
a>()
- subshell:
(command)
- aritmetické vyhodnocení:
(())
- definice funkce:
fun () { echo x; }
- seznam vzorů v globu:
?()
,*()
,+()
,@()
,!()
(pouze pokudextglob
je povolen )