子命令语句分组

  • 本文关键字:语句 命令 bash
  • 更新时间 :
  • 英文 :


今天我尝试了这个,有点惊讶地发现它不起作用:

$ nice -n 10 { ./configure && make ; }
-bash: syntax error near unexpected token `}'

有没有办法在"子命令"中使用分组?

你试过这个吗? =)

 nice -n10 bash -c './configure && make' 

你不能只是将 shell 语法传递给程序的 argv 并期望它理解它。具体来说,您看到的错误是由于 &&; ,它们是分隔命令的"列表运算符"。Bash试图将nice的参数评估为:

nice '-n' '10' '{' './configure'

然后 Bash 尝试评估 &&make) 之后的下一个命令,然后是下一个命令,即 } 。从技术上讲,大括号既是"保留字"又是"控制运算符"。不同的贝壳对裸牙套的处理方式略有不同,但这是一个深奥的细节。关键取决于 shell,要么是解析错误(如此处所示),要么是由于找不到名为" } "的命令而导致的错误(通常是前者。

此规则的例外仅存在于 shell 本身中。例如,Bash coproc 关键字的工作方式与此类似,几乎可以像您的示例一样对其参数进行特殊解析和评估。

最新更新