Existuje nějaký standard, který pokrývá přenositelnost spuštění příkazu po přiřazení proměnné na stejném řádku?
APPLE="cider" echo hi
Jak je něco takového přenosné? Kde to bude fungovat a kde ne?
Také:moje skripty shellu začínají #!/bin/sh, pokud to má nějaký rozdíl.
Přijatá odpověď:
Pokud používáte shell kompatibilní s POSIX, ano.
Z definice příkazového jazyka shellu POSIX:(relevantní body tučně)
„Jednoduchý příkaz“ je posloupnost volitelných přiřazení proměnných a přesměrování, v libovolném pořadí, volitelně následovaná slovy a přesměrováními, ukončená ovládacím operátorem.
Když je vyžadováno provedení daného jednoduchého příkazu (to znamená, když jakákoli podmíněná konstrukce, jako je seznam AND-OR nebo příkaz case, neobešla jednoduchý příkaz), následující rozšíření, přiřazení a přesměrování budou všechna provedena z od začátku textu příkazu do konce:
Slova, která jsou rozpoznána jako přiřazení proměnných nebo přesměrování podle Shell Grammar Rules se uloží pro zpracování v krocích 3 a 4.
Slova, která nejsou přiřazení proměnných nebo přesměrování, budou rozšířena. Pokud některá pole po rozšíření zůstanou, první pole bude považováno za název příkazu a zbývající pole jsou argumenty příkazu.
Přesměrování se provádějí podle popisu v části Přesměrování.
Každé přiřazení proměnné musí být před přiřazením hodnoty rozšířeno o expanzi vlnovky, parametru, substituci příkazů, aritmetické rozšíření a odstranění kotací.
V předchozím seznamu může být pořadí kroků 3 a 4 obráceno pro zpracování speciálních vestavěných utilit; viz Speciální vestavěné nástroje.
Pokud nevyjde žádný název příkazu, přiřazení proměnných ovlivní aktuální prostředí provádění. V opačném případě přiřazení proměnných budou exportována pro prostředí provádění příkazu a neovlivní aktuální prostředí provádění (kromě speciálních vestaveb).
Také ano #!/bin/sh
záležitosti. Z POSIX definice sh
:
Obslužný program sh je interpret příkazového jazyka, který provádí příkazy načtené z řetězce příkazového řádku, standardního vstupu nebo zadaného souboru. Aplikace zajistí, aby příkazy, které mají být provedeny, byly vyjádřeny v jazyce popsaném v příkazovém jazyce Shell .
Takže v podstatě to říká, že sh
musí dodržovat výše uvedená pravidla.
Takže pokud používáte OS kompatibilní s POSIX, jste v pořádku.