/ / Vyhnite sa zdvojeniu Unix PATH pomocou "set -f" - unix, path, set

Vyhnite sa zdvojeniu Unix PATH pomocou "set -f" - unix, path, set

"Videl som skript, ktorý modifikuje Unix $ PATH a aby sa zabránilo duplicite položiek, používa nasledujúcu techniku:

set path = ($path:q /some/new/path)
set path = ($path:q /another/directory)
set -f path = ($path:q)

Nechápem, ako funguje ...

Dokumentácia k príznaku "-f" hovorí:

Zakázať generovanie názvu súboru

čo mi nedáva žiadny zmysel a čo je to zvláštne: q?

Vďaka!

UPRAVIŤ:

toto Super používateľské otázky pomohol mi pochopiť, že "q" je modifikátor. a tcsh človek vysvetľuje:

Keď sa použije modifikátor `: q ' nahradením sa premenná rozšíri na viacnásobné slová pričom každé slovo je oddelené prázdne a citované, aby sa zabránilo neskôr nahradenie príkazu alebo názvu súboru

Druhá úprava:

V skutočnosti sa zdá, že "-f" samotné robí magické:

~$ set days = (Sunday Monday Tuesday Monday Sunday)
~$ echo $days
Sunday Monday Tuesday Monday Sunday
~$ set -f days = ($days)
~$ echo $days
Sunday Monday Tuesday

Napriek tomu nerozumiem, ako je výsledok "Zakázať generovanie názvu súboru".

odpovede:

1 pre odpoveď č. 1

Zakázanie generovania názvu súboru je zvyčajne potrebné, ak narazíme na názvy súborov, ktoré obsahujú *, ?, {} atď. Pri manipulácii s týmito súbormi je potrebné dávať pozor na to, aby sme nepracovali názov súboru ako zástupný znak. vim stack*, neskôr by sme tento súbor nemali vymazávať, pretože všetky ostatné súbory začínajú stack tiež vymazané. Alternatívnym spôsobom, ako odstrániť súbor, je citovať ako rm "stack*", Ak je to potrebné, je možné povoliť generovanie názvu súboru pomocou set +f v plášti.


0 pre odpoveď č. 2

Váš zmätok vyvstáva z toho, že čítate ksh manuálne, ale používate tcsh shell. Tcsh syntax je veľmi odlišný od syntaxe shellu, ktorý je oveľa bežnejší.

Príkaz set je zabudovaný do shellu, takže keď bežíte set v tcsh dostanete úplne iný príkaz set spustiť z ksh.

z man tcsh:

   set [-r] [-f|-l] name=(wordlist) ... (+)
...
If -f or -l are specified,  set only unique words keeping their
order.   -f  prefers the first occurrence of a word, and -l the
last.