trap 命令使用的单引号和双引号有什么区别?

trap 命令使用的单引号和双引号有什么区别?

我正在尝试学习如何trap在 Bash 上使用 signal 命令。该trap命令非常容易使用,但困扰我的问题是使用单引号和双引号的重要性。

  • 命令中使用的单引号和双引号有什么区别trap

  • 您能举几个简单的例子来清楚地表明两种用途之间的区别吗?

答案1

trap命令仅将字符串作为 shell 命令进行处理,例如eval.该字符串将被处理以进行扩展,因此双引号和单引号之间的区别在于第一次扩展发生的时间。在双引号中,它们在设置陷阱时发生,在单引号中则在触发时发生。

例如,这将在中断foo=1时打印read,但使用单引号时它将打印foo=2

#!/bin/bash
foo=1
trap "echo foo=$foo; exit" INT
foo=2
read          # hit Ctrl-C here

当然,即使使用双引号,当陷阱触发时,生成的命令也会扩展,因此foo=$0在上面的陷阱之前的行上,将导致脚本在中断时打印脚本的名称。

相关内容