2010-09-14 58 views
2

正试图通过变量在ksh中传递带有空格的参数。ksh - 传递带空格的参数

下面是一些演示此问题的示例代码。正如你将会看到带有空格的参数后来被作为两个变量处理 - 而不是我所追求的。

*更新 - 我没有复制和粘贴origianl问题中的所有代码。 **

内容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 

感谢,

回答

0

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

# create an array 
CMD=(param_test.sh 'a b' c) 
# execute the command contained in the array 
${CMD[@]} 
+0

谢谢Dennis,我需要的秘密酱是$()。 什么似乎对我来说是使用这个 - myvar ='\ test \ test' out = $(print -R $ myvar | sed's/\\/\\\\\\/g') – Anthony 2010-09-15 23:19:12

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 

由于参数的空间非常棘手,所以我们希望有更好的方法。 但是,上述工作尽管不是有效的方法

+0

嗨拉古拉姆,谢谢你的答复,但我已经更新了原帖。希望这将解释我试图让自己变得更好。 – Anthony 2010-09-14 06:13:28