Může někdo vysvětlit rozdíl mezi deklarovat a vysadit pomocí příkladů z reálného života.
Odpovědět
V bash
, typeset
a declare
jsou úplně stejné. Jediný rozdíl je v tom, že typeset
je považován za zastaralý.
typeset: typeset [-aAfFgilrtux] [-p] name[=value] ... Set variable values and attributes. Obsolete. See `help declare".
Manuální stránka je dokonce uvádí stejným dechem:
declare [-aAfFgilrtux] [-p] [name[=value] ...] typeset [-aAfFgilrtux] [-p] [name[=value] ...] Declare variables and/or give them attributes.
typeset
je přenosný na jiné skořápky, například ksh93
. Pokud se snažíte o přenositelnost napříč prostředími, použijte typeset
(a ujistěte se, že způsob, jakým jej voláte, je přenosný). Pokud se o takovou přenositelnost nestaráte, použijte declare
.
Komentáře
- můžete prosím uveďte nějaký příklad toho, kde a proč je toto použití v bash skriptu
- … jak jsem řekl, jsou úplně stejné. Nerozumím tomu, jak
může je odlišit, pokud tomu tak je.
help typeset
, ne v man typeset
. typeset
považován za zastaralý? Odpovědět
Znám případ, kdy je declare
užitečné vyhnout se zlému eval
: proměnné indirection :
$ var=foo $ x=var $ declare "$x=another_value" $ echo $var another_value
Komentáře
- Toto je pěkný komentář, ale jak to odpovídá na otázku, která je ab out
typeset
adeclare
? - Na to již dobře odpověděl Chris Down, moje odpověď je pouze případ, kdy to ' je užitečné
- Možná mi to ' nebylo jasné. Komentáře by měly být komentáři a odpovědi by měly být odpověďmi. Toto není komentář, ale odpověď.
- Můj úryvek by v komentáři nevyjasnil '
- , ale stále můžete přiřadit proměnné pomocí vysázet … stačí nahradit deklaraci vysázením a stále získáte stejný výsledek.