执行包含特殊字符的字符串



rh6ksh93

我很难获得kornshell脚本执行命令。以下两个var在两个命令之间是恒定的

GLOBAL_CAT=/a/path/to/a/dir
DATA=/a/data/file.txt

cmd 1: m_cat_add -catalog $ global_cat -data $ data -key'{akey1}'

cmd 2: m_cat_add -catalog $ global_cat -data $ data -key'{akey1;akey2}'

请密切注意封闭括号的单引号,并向分离两个键值

的分号

CMD1和CMD2从键盘进行交互式输入时都可以工作m_cat命令要求单价

包含-key的值

现在我搅动一个方便的kornshell脚本:

GLOBAL_CAT=/a/path/to/a/dir
DATA=/a/data/file.txt
KEYY="{aKey1}"
CMDSTR="m_cat -catalog ${GLOBAL_CAT} -data ${DATA} -key '${KEYY}'"
`eval "$CMDSTR"`      # works 
KEYY="{aKey1; aKey2}"
CMDSTR="m_cat -catalog ${GLOBAL_CAT} -data ${DATA} -key '${KEYY}'"
`eval "$CMDSTR"`      # m_cat throws a "usage" errmsg

因此,在出现那个半龙时,发生了一些微妙而辛辣m_cat命令。

在现实世界中,我的脚本在段落中从文件中读取三个var,所以我不能只是手工编辑keyy

有什么想法吗?后斜线?以某种方式强迫字面上的?

tia,

仍在学习的史蒂夫

事实证明,半隆是字符的默认情况下,隐式解析发生在可变扩展期间。所以用

KEYY="{aKey1; aKey2}"

CMDSTR变为

m_cat -catlog foobar -data bohica '{aKey

由于无与伦比的单引号而不能成为有效的命令。解决方案是将IF设置为我所知道的角色,永远不会在字符串中

IFS='<'

那做了这个技巧。感谢所有回答!

仍在学习的史蒂夫

最新更新