Vairāk
Kas ir "eval" komanda bash?
Ko varat darīt ar komandu eval
? Kāpēc tā ir noderīga? Vai tā ir kāda iebūvēta bash funkcija? Tai nav man
lapas..
184
3
eval
ir POSIX daļa. Tā ir saskarne, kas var būt iebūvēta čaulā.Tā aprakstīta "POSIX programmētāja rokasgrāmatā": http://www.unix.com/man-page/posix/1posix/eval/.
Tas pieņems argumentu un no tā konstruēs komandu, ko izpildīs čaulas programma. Šis ir manlapas piemērs:
$foo
ar vērtību'10'
un$x
ar vērtību'foo'
.$y
, kas sastāv no virknes'$foo'
. Dolāra zīmei jābūt izvadītai ar'$'$'
.echo $y
.'$foo'
.eval
. Tas vispirms$x
vispirms novērtēs kā virkni'foo'
. Tagad mums ir izteikumsy=$foo
, kas tiks novērtēts kāy=10
.echo $y
rezultāts ir vērtība'10'
.Šī ir daudzās valodās, piemēram, Perl un JavaScript, izplatīta funkcija. Vairāk piemēru meklējiet perldoc eval: http://perldoc.perl.org/functions/eval.html.
Jā,
eval
ir bash iekšējā komanda, tāpēc tā ir aprakstītabash
man lapā.Parasti to izmanto kombinācijā ar Komandu aizvietošana. Bez skaidri izteiktas
eval
, apvalks mēģina izpildīt komandas aizvietošanas rezultātu, nevis to novērtēt.Pieņemsim, ka vēlaties kodēt ekvivalentu
VAR=vērtība; echo $VAR
. Ievērojiet atšķirību, kā čaulas apstrādāecho VAR=vērtība
rakstīšanu:Apvalks mēģina izpildīt
echo
unVAR=vērtība
kā divas atsevišķas komandas. Tā izmet kļūdu par otro virkni. Piešķiršana paliek neefektīva. 2. andcoz@...:~> eval $( echo VAR=vērtība ) andcoz@...:~> echo $VAR value Apvalks apvieno (concatenates) abas virknesecho
unVAR=vērtība
, izanalizē šo vienotu vienību atbilstoši attiecīgajiem noteikumiem un izpilda to.Pēdējā, bet ne mazāk svarīgā komanda
eval
var būt ļoti bīstama. Lai izvairītos no drošības problēmām, rūpīgi jāpārbauda visieval
komandai ievadītie dati.eval
nav man lapas, jo tā nav atsevišķa ārēja komanda, bet gan iebūvēta čaulā, t.i., čaulas iekšējā komanda, ko pazīst tikai čaula (bash
). Attiecīgajābash
man lapas daļā teikts:Turklāt izvades rezultāts, ja
help eval
ir šāds:eval
ir spēcīga komanda, un, ja plānojat to izmantot, jums jābūt ļoti uzmanīgam, lai novērstu iespējamos drošības riskus, kas ar to saistīti.