Due modi meno comuni per fare questo fare uso di caratteristiche di lunga standing perl.
La prima è la core module Env
, che lega le variabili di ambiente processo perl variabili:
sh$ export VAR1=1000
sh$ export VAR2=33
sh$ perl -MEnv -E 'say $VAR1/$VAR2' # imports all environ vars
333.333333333333
sh$ perl -MEnv=VAR1,VAR2 -E 'say $VAR1/$VAR2' # imports only VAR1, VAR2
333.333333333333
noti che le variabili devono essere presenti nell'ambiente ereditato dal processo Perl, per esempio con export VAR
come sopra, o esplicitamente per un singolo comando (come da FOO=hello perl -MEnv -E 'say $FOO'
).
Il secondo e un po 'più oscuri modo è quello di utilizzare l'uso perl di -s
switch per impostare le variabili arbitrarie dalla riga di comando:
sh$ VAR1=1000
sh$ VAR2=33
sh$ perl -s -E 'say $dividend/$divisor' -- -dividend=$VAR1 -divisor=$VAR2
333.333333333333
awk fa qualcosa di simile con il suo -v
switch.
Il motivo per cui non funziona è che il tuo 'var1/var2' è solo testo in Perl. Anche dopo averlo corretto a '$ var/$ var2', lo script non può vedere che queste due variabili siano definite nella shell che chiama lo script. Devi passare i loro valori allo script in qualche modo (ad es. Come variabili d'ambiente, vedi le risposte). – reinierpost