ksh 双引号和变量

ksh 双引号和变量

这是 KSH 的问题。

今天遇到了一些变量和引号的问题。顺序无所谓,虽然我不能读取脚本,但只能执行它。

SomeScripts.sh "First=Harvey Lo","Third=Rebecca Won","Second=laugh at"

结果:

Harvey Lo laugh at Rebecca Won

但如果我尝试将其放入 ksh 脚本文件中,它不起作用:

#!/bin/ksh
SOMEVAR=\"First=Harvey Lo\",\"Third=Rebecca Won\",\"Second=laugh at\"
SomeScripts.sh ${SOMEVAR}

结果:

Error: No. of ARGS > 3

我甚至尝试了以下方法,但仍然不起作用。

#!/bin/ksh
SOMEVAR=\"First=Harvey Lo\",\"Third=Rebecca Won\",\"Second=laugh at\"
SomeScripts.sh `echo ${SOMEVAR}`

结果:

Error: No. of ARGS > 3

谁能帮忙,我只知道 SomeScripts.sh 里面有一些 java,实际函数有 20 多个参数,但我已经简化了,如下所示。

原始帮助文件:

SomeScripts.sh First=Harvey,Third=Rebecca,Second=laugh
Harvey laugh Rebecca

答案1

您需要意识到您的第一个例子只有一个参数,引用它的方式只是一个细节。这些是相同的:

SomeScripts.sh "First=Harvey Lo","Third=Rebecca Won","Second=laugh at"

SomeScripts.sh "First=Harvey Lo,Third=Rebecca Won,Second=laugh at"

所以让它发挥作用的方法是不是放入\"变量中——相反,你需要在设置它时引用它:

SOMEVAR="First=Harvey Lo","Third=Rebecca Won","Second=laugh at"

这同样相当于一个简单的

SOMEVAR="First=Harvey Lo,Third=Rebecca Won,Second=laugh at"

使用变量时也需要用引号括起来,否则变量展开后会被拆分(这里的拆分就是用空格拆分)。替换` `也是一样。

SomeScripts.sh "$SOMEVAR"

尝试编译该程序并使用不同的引用参数运行它 - 它将向您显示它作为参数接收的具体内容。

#include <stdio.h>
int main(int argc, char *argv[]) {
    printf("argc = %d\n", argc);
    for (argc=0; argv[argc]; argc++)
        printf("argv[%d] = %s\n", argc, argv[argc]);
    return 0;
}

相关内容