GNU/Linux >> Linux Esercitazione >  >> Linux

Qual è la differenza tra env e set (su Mac OS X o Linux)?

Per farla breve:set può vedere le variabili locali della shell, env non può.

Le shell possono avere variabili di 2 tipi:locali, che sono accessibili solo dalla shell corrente, e variabili di ambiente (esportate), che vengono passate a ogni programma eseguito.

Dal set è un integrato comando shell, vede anche le variabili locali della shell (comprese le funzioni della shell). env d'altra parte è un eseguibile indipendente; vede solo le variabili che la shell gli passa, o le variabili d'ambiente.

Quando digiti una riga come a=1 quindi viene creata una variabile locale (a meno che non esistesse già nell'ambiente). Le variabili d'ambiente vengono create con export a=1


Se vuoi limitare l'output di set comando solo alle variabili, puoi eseguirlo in modalità POSIX:

type -a env set
help set
(set -o posix; set) | nl

Se hai bisogno di un controllo più preciso sull'elenco di variabili specifiche, puoi utilizzare i built-in di Bash come declare o compgen , o altri trucchi di Bash.

man bash | less -p '-A action$'  # info on complete & compgen

# listing names of variables
compgen -A variable | nl       # list names of all shell variables
echo ${!P*}                    # list names of all variables beginning with P

compgen -A export | nl         # list names of exported shell variables
export | nl                    # same, plus always OLDPWD
declare -px | nl               # same

declare -pr                    # list readonly variables

# listing names of functions           
compgen -A function | nl
declare -F | nl
declare -Fx | nl

# show code of specified function
myfunc() { echo 'Hello, world!'; return 0; }
declare -f myfunc  

set è un built-in della shell, mentre env è un programma (/usr/bin/env)

set fa diverse cose, ma da solo elenca le variabili d'ambiente. Può anche impostare/commutare interruttori, come set +x o set -v ecc.

env da solo elenca gli elementi esportati variabili di ambiente, ma può eseguire un programma in un ambiente modificato

Vedi man 1 env per ulteriori informazioni.


Linux
  1. Qual è la differenza tra InnoDB e MyISAM?

  2. Qual è la differenza tra un container Linux e un'immagine?

  3. Qual è la differenza tra fsck ed e2fsck?

  4. Qual è la differenza tra ls e l?

  5. Qual è la differenza tra Unix, Linux, BSD e GNU?

Qual ​​è la differenza tra i kernel macOS e Linux

Qual è la differenza tra Linux e Unix?

Qual è la differenza tra Rsync e BTRFS in Linux?

Che cos'è un hypervisor? Qual è la differenza tra il tipo 1 e 2?

Qual è la differenza tra curl e Wget?

Qual è la differenza tra unlink e rm?