当前位置: 首页 > 知识库问答 >
问题:

Linux:$*没有将单词组保留为单个参数[重复]

石思淼
2023-03-14

我有一个父脚本和一个子脚本,

父脚本:

echo 'Parent script 1st arg '$1
echo 'Parent script 2nd arg '$2
PARAMS=$*
ksh child_script.ksh $PARAMS

子脚本:

echo 'Child script 1st arg '$1
echo 'Child script 2nd arg '$2

我通过传递两个参数来执行父脚本,如下所示

ksh parent_script.ksh ABC 'DEF XYZ'

我得到的输出是,

Parent script 1st arg ABC
Parent script 2nd arg DEF XYZ
Child script 1st arg ABC
Child script 2nd arg DEF

我想把DEF,XYZ作为一个参数传递,这就是为什么我用单引号括起来,传递相同的参数。父脚本将它视为单个参数。稍后,当使用$*对其赋值时,不会保留单词的分组。而是作为两个不同的论点被传递。请建议为什么争论没有被通过,有什么方法可以纠正它?

预期输出,

Parent script 1st arg ABC
Parent script 2nd arg DEF XYZ
Child script 1st arg ABC
Child script 2nd arg DEF XYZ

共有1个答案

令狐良骏
2023-03-14

对于ksh,您可以这样做:

#!/bin/ksh
echo "1:$1"
echo "2:$2"
if [[ $(basename $0) == 'tst' ]]
then
    # bash: P="${*@K}"
    P="$1"
    shift
    while [[ $# -gt 0 ]]
    do
        P="\"$P\" \"$1\""
        shift
    done

    echo "P:$P"
    eval ./tst2 $P
fi

也将其链接到tst2(ln tst tst2)。

请注意,我已经有大约 20 年没有使用 ksh 了,所以可能有更快的方法来创建 P(就像 bash 一样)。

$ ./tst a 'b c d'
1:a
2:b c d
P:"a" "b c d"
1:a
2:b c d

对于bash,你可以这样做:

#!/bin/bash
echo "1:$1"
echo "2:$2"
if [[ $(basename $0) == 'tst' ]]
then
    P="${*@K}"
    echo "P:$P"
    eval ./tst2 $P
fi
 类似资料:
  • 我的代码: 产生同样的结果。谁能找出我做错了什么或任何其他方法来实现这一点..谢谢

  • 我有以下方法,这是预期的工作。 但是有没有办法修改它,这样我就不必单独订阅网络客户的电话了 取而代之的是让它成为流量的一部分,并且只从某个订户那里订阅一次? 请注意,这最终必须返回一个可观察的 一些外部订户将执行以下操作。 ; 我希望这能触发整个流程,这也会触发webclient的调用,而不是像上面那样单独调用它。 这可能吗? 因此,寻找类似以下内容的内容,而不是单独订阅webClient。 尝试

  • 将给定的字符串转换为单词数组。 使用 String.split() 提供的模式(pattern)(默认为非 alpha 作为正则表达式)来转换为一个字符串数组。 使用 Array.filter() 去除任何空字符。 省略第二个参数来使用默认的正则表达式。 const words = (str, pattern = /[^a-zA-Z-]+/) => str.split(pattern).filte

  • 问题内容: 我有一个无缘无故的多维数组 我想将此数组转换为这种形式 任何想法如何做到这一点? 问题答案: 假设此数组可能是(也可能不是)冗余嵌套,并且您不确定它的深度,可以为您展平它:

  • 问题内容: 在PHP中,有没有一种简单的方法可以将数字转换为单词?举例来说, 27 到 27 。 问题答案: 我在网上找到了一些(2007/2008)源代码,它具有版权,但是我可以自由使用它,并根据需要对其进行修改,因此将其放在此处并在CC-Wiki下重新许可:

  • 使用javascript,我想将任意长度的字符串拆分为最多80个字符的段。需要注意的是,我不想拆分单词。例如,我目前正在使用下面列出的方法在JavaScript中将大字符串拆分为n大小的块 问题是,一个从第76个字符开始到第84个字符结束的单词将被分成两半。是否有一个光滑的正则表达式或代码来防止这种情况? 为了澄清这一点,我能够编写一个小函数来实现这一点,我只是想知道是否有一种干净、简洁的方法。