gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:47:02 24 4
gpt4 key购买 nike

RH6ksh93

我在获取 kornshell 脚本来执行命令时遇到问题。以下两个变量在两个命令之间是常量

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

命令 1: m_cat_add -catalog $GLOBAL_CAT -data $DATA -key '{aKey1}'

命令 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

所以分号的存在会发生一些微妙而古怪的事情,就好像 ksh 在扩展 vars 之后忽略单引号并假定分号标记命令的结尾,这是一个失败的语法m_cat 命令。

在现实世界中,我的脚本在 while 循环中从一个文件中读取三个变量,所以我不能只手动编辑 KEYY

有什么想法吗?反斜杠?以某种方式强制文字?

TIA,

仍在学习史蒂夫

最佳答案

原来分号是默认的 IFS 字符之一,隐式解析发生在变量扩展期间。所以用

KEYY="{aKey1; aKey2}"

CMDSTR 变为

m_cat -catlog foobar -data bohica '{aKey

由于不匹配的单引号,这不是有效的命令。解决方案是将 IFS 设置为一个我知道永远不会出现在字符串中的字符

IFS='<'

成功了。感谢所有回复!

仍在学习史蒂夫

关于linux - 执行包含特殊字符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57320933/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com