O problema está nas suas aspas duplas. Aqui você não precisa citar as chaves de hash como elas são identificadores simples . De perldoc perldata
:
In fact, a simple identifier within such curlies is forced to be a string, and likewise within a hash subscript. Neither need quoting. Our earlier example,
$days{'Feb'}
can be written as$days{Feb}
and the quotes will be assumed automatically. But anything more complicated in the subscript will be interpreted as an expression. This means for example that$version{2.0}++
is equivalent to$version{2}++
, not to$version{'2.0'}++
.
Então:
perl -le 'print crypt($ENV{PSWD},"\$$ENV{HVAL}\$$ENV{SVAL}\$")'
Se você está usando dentro de backticks, você precisa dobrar suas barras invertidas como em:
var='perl -le 'print crypt($ENV{PSWD},"\$$ENV{HVAL}\$$ENV{SVAL}\$")''
Melhor é usar a forma $(...)
de substituição de comando:
var=$(perl -le 'print crypt($ENV{PSWD},"\$$ENV{HVAL}\$$ENV{SVAL}\$")')