2

変数を介して ksh でスペースを含むパラメーターを渡そうとしています。

この問題を示すサンプル コードを次に示します。ご覧のとおり、スペースを含むパラメーターは後で2つの変数として処理されます-私が求めているものではありません。

*更新 - 元の質問のすべてのコードをコピーして貼り付けたわけではありません。**

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

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 に答える
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

引数にはスペースがあるため、引数として指定するのは非常に難しいです(もっと良い方法があることを願っています)。しかし、効果的なアプローチではありませんが、上記は機能します

于 2010-09-14T05:19:26.543 に答える