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
typesetadeclare? - 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.