Trapコマンドで使用される一重引用符と二重引用符の違いは何ですか?

Trapコマンドで使用される一重引用符と二重引用符の違いは何ですか?

trapBashでsignalコマンドを使用する方法を学びたいと思います。このtrapコマンドは使いやすいですが、私を悩ませる質問は、一重引用符と二重引用符を使用することの重要性です。

  • コマンドで使用される一重引用符と二重引用符の違いは何ですかtrap

  • 2つの用途の違いを明確に示すために、いくつかの簡単な例を挙げることができますか?

答え1

このtrapコマンドは文字列をシェルコマンドとして扱います(たとえばeval、文字列は拡張のために処理されるため、二重引用符と一重引用符の違いは最初の拡張が発生したときなど)。二重引用符はトラップが設定されたときに発生し、一重引用符はトリガーされたときに発生します。

たとえば、次はbreakにfoo=1印刷されますが、read単一引用符を使用すると次のように印刷されますfoo=2

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

もちろん、二重引用符を使用しても、生成されたコマンドはトラップが実行されると拡張されるため、上記foo=$0のトラップの前の行でスクリプトが中断されたときにスクリプト名が印刷されます。

関連情報