在 bash 中如何解析 (abc)

在 bash 中如何解析 (abc)

我正在使用一个专为 Windows 设计的程序,它是我自己为 GNU/linux 编译的。该程序在命令行中运行,其中一个参数如下所示:

prgm -arg1 abcd(10)(22) -i files.ext

其中(10)和是类似、和的(22)标志。此命令失败,因为尝试解释内部内容并出现语法错误。因此,我有两个问题:abcdbash()

  1. 在这种情况下,bash 实际上试图用括号做什么?为什么会失败?
  2. 我可以更改源代码,例如当程序识别出另一个符号时。例如,我可以使用花括号代替圆括号。什么符号是安全的?

答案1

Bash 将它们解释为列表:

(列表)

list 在子 shell 环境中执行(请参阅下面的命令执行环境)。影响 shell 环境的变量赋值和内置命令在命令完成后不再有效。返回状态是 list 的退出状态。


什么符号代表安全?

Bash 使用了大量字符,并要求你转义符号。这是一个符号列表具有特殊含义:

!#$%&'()*+,-./:;<=>?@[\]^_`{|}~

你需要逃脱()如果那些是字符(添加\在前面)

因此,就您而言,以下内容将被解释为纯文本:

prgm -arg1 abcd\(10\)\(22\) -i files.ext

另一种方法是使用引号或双引号,如下所示:

prgm -arg1 "abcd(10)(22)" -i files.ext

答案2

避免引用问题的一个常见方法是简单地用空格分隔选项,如下所示:

prgm -arg1 abcd 10 22 -i files.ext

在您的程序中,您会解析参数,直到遇到-

另一个常见的选择是使用逗号:

prgm -arg1 abcd,10,22 -i files.ext

相关内容