"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ď č. 1Zaká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.