2

我试图通过变量在 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

谢谢,

4

2 回答 2

0

我改变了调用脚本是这样的

#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

由于 args 有空格,因此将其作为参数非常棘手(我希望应该有更好的方法)。但是即使不是有效的方法,上述方法也有效

于 2010-09-14T05:19:26.543 回答
0

BashFAQ/050适用。一般来说,您应该尽量避免将命令放在变量中。如果你必须这样做,那么数组可能是要走的路:

# create an array
CMD=(param_test.sh 'a b' c)
# execute the command contained in the array
${CMD[@]}
于 2010-09-14T16:54:46.407 回答