ksh + аргумент в PARAM - PullRequest
       0

ksh + аргумент в PARAM

1 голос
/ 25 августа 2010

возможно ли напечатать значение NUM (100), в то время как я должен использовать только ', а не "

 # NUM=100
 # PARAM='some text $NUM'
 # echo $PARAM
   some text $value

правильный отпечаток

some text 100

Ответы [ 2 ]

1 голос
/ 25 августа 2010

Использование двойных кавычек вместо одинарных кавычек, так как одинарные кавычки не допускают интерполяции переменных:

NUM=100
PARAM="some text $NUM"
echo $PARAM

РЕДАКТИРОВАТЬ: Поскольку мне не разрешено использовать двойные кавычки, вы можете использовать конкатенацию как:

NUM=100
PARAM='some text '$NUM
echo $PARAM
0 голосов
/ 25 августа 2010

крайне небезопасно, но: eval echo $PARAM

Я бы настоятельно рекомендовал против этого: что, если param содержит какую-нибудь деструктивную команду в обратных чертах? Либо переосмыслите свой дизайн, либо пересмотрите язык реализации.

Вы могли бы по крайней мере избежать обратных кавычек и сначала построить $():

NUM=100
PARAM='this is $NUM -- `rm foo` -- $(rm bar)'
param_safer=$(echo "$PARAM" | sed 's/`/\\`/g; s/\$(\([^)]\+\))/\\$\\(\1\\)/g')
eval echo "$param_safer"

выходы: this is 100 -- `rm foo` -- $(rm bar)

...