根據這個問題我敢不允許評論:變量擴展的Bash陷阱?
Is it necessary to specify traps other than EXIT?
恕我直言,這是一個不完整的答案,因爲它不包括通常的情況是:
TEMPDIR_OR_FILE=$(mktemp [ some switches and params and an XXX pattern])
# ...so we want trap to do rm -rf ${TEMPDIR_OR_FILE}
給出的例子是:
# reset
trap 'excode=$?; cmd; trap - EXIT; echo $excode' EXIT HUP INT QUIT PIPE TERM
# ignore
trap 'excode=$?; trap "" EXIT; cmd; echo $excode' EXIT HUP INT QUIT PIPE TERM
這裏的問題是,單引號阻止你exp anding ${TEMPDIR_OR_FILE}
我認爲這是一個複雜因素是變量擴大的時間。我需要${TEMPDIR_OR_FILE}
立即展開,但其他項目可能需要等待陷阱執行。我如何完成這項工作?
由於旁邊所有大寫名稱用於具有對操作系統或系統有意義的變量,而具有至少一個小寫字符的名稱保留給應用程序使用,並且保證不會修改POSIX指定工具的行爲。請參閱http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html第四段。 –
這就是說,**爲什麼要在陷阱被定義時擴展TEMPDIR_OR_FILE,而不是執行它時?稍後在執行時執行此操作(通過將定義放在外部單引號內)可以讓您更改正在使用的臨時文件。 –
根據我的經驗,這不是一個問題。這些變量通常會設置一次,甚至可能只讀,然後用於程序的其餘部分。延期擴展不會改變任何內容。爲什麼你需要更快地解析它?我大概可以制定一個kludge,但不願意增加維護頭痛。 –