簡體   English   中英

設置 -eu 時未綁定的變量不會導致退出子shell

[英]Unbound variable not causing exit from subshell when set -eu

$ cat test.sh
set -eu
echo "`wc -l < $DNE`"
echo should not get here

$ /bin/bash test.sh
test.sh: line 2: DNE: unbound variable

should not get here

我正在運行 bash 版本 4.1.2。 有沒有辦法確保子shell中未綁定變量的所有此類使用導致腳本退出而無需修改涉及子shell的每個調用?

確保可變消毒的更好解決方案

#!/usr/bin/env bash

set -eu

if [[ ${1-} ]]; then
  DNE=$1
else
  echo "ERROR: Please enter a valid filename" 1>&2
  exit 1
fi

通過像這樣在大括號內的變量名中添加連字符,bash 可以理智地處理未定義的變量。 我還強烈建議查看 Google shell 樣式指南,這是一個很好的參考https://google.github.io/styleguide/shell.xml

[[ -z ${variable-} ]] \
  && echo "ERROR: Unset variable \${variable}" \
  && exit 1 \
  || echo "INFO: Using variable (${variable})"

使用臨時變量讓 test.sh 進程知道wc失敗。 您可以將其更改為:

#!/bin/bash
set -eu
out=$(wc -l < $DNE)
echo $out
echo should not get here

現在,如果 wc 失敗,您將不會看到不should not get here

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM