【问题标题】:ksh - passing parameter with spaceksh - 用空格传递参数
【发布时间】:2010-09-15 00:54:46
【问题描述】:

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

谢谢,

【问题讨论】:

    标签: parameters ksh spacing


    【解决方案1】:

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

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

    【讨论】:

    • 感谢丹尼斯,我需要的秘诀是 $( )。似乎对我有用的是使用它 - myvar='\test\test' out=$(print -R $myvar |sed 's/\\/\\\\\\/g')
    【解决方案2】:

    我把调用脚本改成了这样

    #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 有空格,因此将其作为参数非常棘手(我希望应该有更好的方法)。 但即使不是有效的方法,上述方法也有效

    【讨论】:

    • 嗨 Raghuram,感谢您的回答,但我已经更新了原始帖子。希望这能解释我想要做得更好。
    猜你喜欢
    • 1970-01-01
    • 2018-11-10
    • 2013-08-14
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 2017-05-02
    相关资源
    最近更新 更多