7
$ 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を実行しています。サブシェルでのバインドされていない変数のそのようなすべての使用により、サブシェルを含む各呼び出しを変更することなく、スクリプトが終了することを確認する方法はありますか?

4

2 に答える 2

12

変数のサニタイズを確実にするためのより良いソリューション

#!/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 シェル スタイル ガイドも参照することを強くお勧めします。

[[ -z ${variable-} ]] \
  && echo "ERROR: Unset variable \${variable}" \
  && exit 1 \
  || echo "INFO: Using variable (${variable})"
于 2016-02-26T01:03:53.300 に答える
2

test.sh プロセスに の失敗を知らせるために、一時変数を使用しますwc。次のように変更できます。

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

should not get hereこれで、 wc が失敗した場合は表示されなくなります。

于 2013-02-09T19:55:13.567 に答える