Ricerca nel sito web

Sostituzione di variabili annidate e variabili BASH predefinite in Linux - Parte 11


Gli ultimi due articoli su BASH Shell, in cui abbiamo discusso in dettaglio le variabili, sono stati molto apprezzati dai nostri lettori. Noi del Team Tecmint siamo molto desiderosi di fornirti gli argomenti più recenti, aggiornati e pertinenti trattati in dettaglio. Inoltre cerchiamo sempre di toccare le principali prospettive degli argomenti corrispondenti.

Ecco l'ultimo articolo sulle variabili Linux in cui vedremo la sostituzione delle variabili e le variabili definite in Shell prima di chiudere questo argomento.

Bash esegue la sostituzione delle variabili prima che il comando venga effettivamente eseguito. La Linux Bash Shell cerca tutto il segno "$" prima di eseguire il comando e lo sostituisce con il valore della variabile. Il processo di sostituzione della variabile Bash viene eseguito solo una volta. Cosa succede se abbiamo variabili annidate?

Nota: per variabile nidificata intendiamo la variabile dichiarata all'interno della variabile. Vediamo lo scenario precedente nell'esempio seguente.

Dichiarare una variabile di sola lettura ed eseguibile come di seguito.

avi@localhost:~$ declare -rx Linux_best_website="linux-console.net"

Controllare il valore della variabile memorizzata.

avi@localhost:~$ printf "%s" "$Linux_best_website" 

linux-console.net

Ora dichiara un'altra variabile che è nuovamente di sola lettura ed eseguibile.

avi@localhost:~$ declare -rx Linux_website="Linux_best_website"

Ora la situazione è che abbiamo definito due variabili.

‘Linux_best_website’, il cui valore è “linux-console.net ”
e "Linux_website", il cui valore è "Linux_best_website"

Quale sarebbe il risultato se eseguissimo il comando di una riga riportato di seguito?

avi@localhost:~$ printf "%s" "$Linux_website"

Dovrebbe prima sostituire la variabile '$Linux_website', con il valore “Linux_best_website ” e poi “$Linux_best_website” è di nuovo una variabile il valore di ovvero “linux-console.net”. Quindi l'output finale dell'esecuzione del comando seguente dovrebbe essere.

avi@localhost:~$ printf "%s" "$Linux_website" 

linux-console.net

Ma sfortunatamente non è questa la situazione, l'output che stiamo ottenendo è Linux_best_website.

Motivo? Sì! Bash sostituisce il valore della variabile solo una volta. Che dire degli script e dei programmi complessi in cui dobbiamo sostituire frequentemente le variabili e dobbiamo sostituire la variabile più di una volta?

Ecco il comando "eval" che esegue un lavoro aggiuntivo di sostituzione delle variabili più di una volta in uno script. Ecco un esempio per rendere il tutto trasparente come il vetro.

Dichiara una variabile x, il cui valore è 10.

avi@localhost:~/Desktop$ declare x=10

Controlla il valore della variabile x, che abbiamo appena definito.

avi@localhost:~/Desktop$ echo $yx

x10

Dichiara una variabile y, il cui valore è x.

avi@localhost:~/Desktop$ declare y=x

Controlla il valore della variabile y, che abbiamo appena definito.

avi@localhost:~/Desktop$ echo $y 

x

Ecco il problema della sostituzione di variabile una tantum BASH, che non esegue un ciclo aggiuntivo di sostituzione di variabile. Stiamo utilizzando il comando "eval" per risolvere questo problema.

avi@localhost:~/Desktop$ eval y=$x

Ora controlla il valore della variabile "y".

avi@localhost:~/Desktop$ echo $y 

10

Evviva! Il problema è stato risolto e il comando "eval" ha vinto la gara :)

Per non parlare del fatto che il comando "eval" è molto utile nei programmi di script di grandi dimensioni ed è uno strumento molto utile.

L'ultima ma non meno importante parte di questo post riguarda le variabili predefinite BASH. NO! Non farti prendere dal panico vedendo questo elenco. Non è mai necessario ricordare l'intero elenco prima di iniziare a scrivere gli script, tranne alcuni. Come parte del processo di apprendimento, presentiamo l'elenco delle variabili predefinite BASH.

No. BASH VARIABLE RESULT
1 auto_resume Process command completion for the stopped jobs.
2 BASH PATH of the shell.
3 BASH_ENV Shows the name of the profile file
4 BASH_VERSION Shows the version of Bash
5 BASH_VERSINFO Shows Detailed version information.
6 BASH_VERSINFO[0] The major version number (the release).
7 BASH_VERSINFO[1] The minor version number (the version).
8 BASH_VERSINFO[2] The patch level.
9 BASH_VERSINFO[3] The build version.
10 BASH_VERSINFO[4] The release status (for example, beta1 ).
11 BASH_VERSINFO[5] The value of MACHTYPE .
12 CDPATH List of directories separated by colon.
13 COLUMNS Number of Characters per line on Standard Output.
14 EUID User ID of the current user.
15 FCEDIT The default text editor for the fc command.
16 FUNCNAME The name of the fun
17 GROUPS Groups of which the user is a Member.
18 HISTFILE The file containing the command history.
19 HOME The name of your home directory.
20 LINES Number of horizontal lines on Standard Output.
21 MAIL Name of a file to check for incoming mail
22 OSTYPE Name of the operating system.
23 OLDPWD The previous working directory
24 PWD The current working directory
25 RANDOM Prints a random number
26 SHELL The preferred shell to use
27 TIMEFORMAT The format for the time command.
28 UID The ID of the current user

Esiste un enorme elenco di variabili BASH predefinite. Abbiamo provato a produrre un elenco di quelli utilizzati più frequentemente.

È tutto per ora. Sarò di nuovo qui con un altro articolo interessante. Fino ad allora restate sintonizzati e connessi a TecMint. Non dimenticare di fornirci il tuo prezioso feedback nella sezione commenti qui sotto.