ksh - передача параметра с пробелом - PullRequest
2 голосов
/ 14 сентября 2010

я пытаюсь передать параметр с пробелом в ksh через переменные.

Вот пример кода, демонстрирующий проблему.Как вы увидите, параметр с пробелом позже обрабатывается как две переменные - не то, что мне нужно.

* Обновление - я не копировал и не вставлял весь код в вопросе оригинала.**

Содержимое param_test.sh

#!/bin/ksh

echo "check 1"

param_string=${1}
param_string2=${2}

echo "check 2"

echo param_string = $param_string
echo param_string2 = $param_string2

echo "check 3"

Содержимое call_param_test.sh

#!/bin/ksh

param_test.sh 'a b' c

CMD="param_test.sh 'a b' c"

# CMD=param_test.sh
# CMD="${CMD} 'a b c'"


echo CMD is  $CMD

echo now running CMD
${CMD}

echo back to calling script

echo at end


Results of executing call_param_test.sh

check 1
check 2
param_string = a b
param_string2 = c
check 3
CMD is param_test.sh 'a b' c
now running CMD
check 1
check 2
param_string = 'a
param_string2 = b'
check 3
back to calling script
at end

Спасибо,

Ответы [ 2 ]

0 голосов
/ 14 сентября 2010

BashFAQ / 050 применимо. В общем, вы должны стараться избегать помещения команд в переменные. Если вы должны это сделать, то, вероятно, вам стоит использовать массив:

# create an array
CMD=(param_test.sh 'a b' c)
# execute the command contained in the array
${CMD[@]}
0 голосов
/ 14 сентября 2010

Я изменил вызывающий скрипт примерно так

#param_test.sh 'a b' c

#CMD="./param_test.sh \'a b\' c"
CMD="./param_test.sh"
ARGS1="a b"
ARGS2=c

# CMD=param_test.sh
# CMD="${CMD} 'a b c'"


echo CMD is  $CMD  $ARGS

echo now running CMD
#${CMD}
#${CMD} "$ARGS1" ${ARGS2}

echo back to calling script

echo at end

Поскольку у аргументов есть пробелы, довольно сложно представить их в качестве аргумента (я надеюсь, что будет лучший путь). Но вышесказанное работает, хотя и не эффективный подход

...