views:

58

answers:

2

Hi there,

am trying to pass a parameter with a space in ksh via variables.

Here is some sample code to demonstrate the issue. As you will see the parameter with the space is later handled as two variables - not what I am after.

Update - I didn't copy and paste all the code in the origianl question. *

Contents of 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"

Contents of 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

Thanks,

A: 

I changed the calling script something like this

#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

Since the args have spaces its quite tricky to give its as argument(I hope there shuld be better way). But the above works even though not an effective approach

Raghuram
Hi Raghuram, thanks for the answere but I have updated the original post. Hopefully that will explain what I am trying to get at better.
Anthony
A: 

BashFAQ/050 is applicable. In general you should try to avoid putting commands in variables. If you must do it then an array is probably the way to go:

# create an array
CMD=(param_test.sh 'a b' c)
# execute the command contained in the array
${CMD[@]}
Dennis Williamson
Thank Dennis, the secret sauce I needed was $( ).What has seemed to work for me is to use this - myvar='\test\test' out=$(print -R $myvar |sed 's/\\/\\\\\\/g')
Anthony