这是 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;
}