GNU/Linux >> Linux Esercitazione >  >> Linux

Funzioni nelle variabili Shell?

Sto leggendo questo post sull'uso delle funzioni nelle variabili della shell bash. Osservo che per utilizzare le funzioni della shell, è necessario esportarle ed eseguirle in una shell figlio come segue:

$ export foo='() { echo "Inside function"; }'
$ bash -c 'foo'
Inside function

Voglio chiedere se è possibile definire le funzioni nelle variabili della shell bash in modo tale che possano essere eseguite nella shell corrente senza usare export ed eseguire una nuova shell?

Risposta accettata:

No, non puoi.

Se vuoi usare una funzione nella shell corrente, semplicemente definendola, usala in seguito:

$ foo() { echo "Inside function"; }
$ foo
Inside function

Prima del giorno di Shellshock, puoi memorizzare la funzione all'interno di una variabile, esportare la variabile e usare la funzione nella sottoshell, perché bash supporta la funzione di esportazione, bash inserirà la definizione della funzione nella variabile di ambiente come:

foo=() {
  echo "Inside function"
}

quindi interpreta la funzione sostituendo = con spazio. Non c'è intenzione di inserire la funzione nella variabile e fare riferimento alla variabile che eseguirà la funzione.

Ora, dopo che Stéphane Chazelas ha trovato il bug, quella funzionalità è stata rimossa, nessuna definizione di funzione è più memorizzata in una semplice variabile di ambiente. Ora le funzioni esportate verranno codificate aggiungendo il prefisso BASH_FUNC_ e suffisso %% per evitare di scontrarsi con le variabili di ambiente. bash l'interprete può ora determinare se sono funzioni di shell o meno indipendentemente dal contenuto delle variabili. Devi anche definire la funzione ed esportarla in modo esplicito per usarla nella sub-shell:

$ foo() { echo "Inside function"; }
$ export -f foo
$ bash -c foo
Inside function

Ad ogni modo, se il tuo esempio ha funzionato con il tuo attuale bash , stai utilizzando una versione vulnerabile.


Linux
  1. Personalizzazione della shell Bash

  2. Riferimenti ai nomi circolari nella funzione Bash Shell, ma non in Ksh?

  3. Come utilizzare le funzioni della shell della riga di comando in Linux

  4. Comprensione delle variabili in Bash Shell sotto Linux

  5. Ottieni un elenco di nomi di funzioni in uno script di shell

.bashrc vs .bash_profile

Shell Scripting Parte V:Funzioni in Bash

Bash Scripting:funzioni spiegate con esempi

Bash Beginner Series #2:Comprensione delle variabili nello scripting di Bash Shell

Bash Scripting Part6 – Crea e usa le funzioni Bash

Tutorial sulle funzioni di Bash Shell con 6 esempi pratici