我正在使用一个专为 Windows 设计的程序,它是我自己为 GNU/linux 编译的。该程序在命令行中运行,其中一个参数如下所示:
prgm -arg1 abcd(10)(22) -i files.ext
其中(10)
和是类似、和的(22)
标志。此命令失败,因为尝试解释内部内容并出现语法错误。因此,我有两个问题:a
b
c
d
bash
()
- 在这种情况下,bash 实际上试图用括号做什么?为什么会失败?
- 我可以更改源代码,例如当程序识别出另一个符号时。例如,我可以使用花括号代替圆括号。什么符号是安全的?
答案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