もっと丈夫なシェル
1853 ワード
bash -u/set -o nounset (set -u)
basn -e/set -o errexit (set -e)
-eを使用して$をチェックできないことに注意してください.なぜなら$ゼロでないとbashはこの値を得ることができません
パイプを使用する場合は、command 1|command 2....|commandn結果はfalse...|true...|false....結果は正しいと考えられます.
このような状況を回避するには、オプションset-o pipefailを使用します.
ファイル名またはコマンドラインパラメータにスペースを使用するのが好きな場合は、shellスクリプトで「」を使用してラップしてください.
if[$filename="foo"]filenameにスペースがある場合、失敗する場合はif[$filename"="foo"]で置き換えることができます.
特に、コマンドラインパラメータに1つのパラメータにスペースが含まれている場合は、$@を取り外すときに2つのパラメータとして扱われます.「$@」を使用します.
プログラムの実行中にエラーが発生して戻ってくると、一時ファイルを残すなど、システムの状態が破壊されます.trapコマンドを使用して改善することができます.
trap command signal[signal]
signalを受信するとcommandが実行され、これらの傍受を除去するにはtrap-signal
basn -e/set -o errexit (set -e)
-eを使用して$をチェックできないことに注意してください.なぜなら$ゼロでないとbashはこの値を得ることができません
command
if [ "$?"-ne 0]; then echo "command failed"; exit 1; fi
:
command || { echo "command failed"; exit 1; }
:
if ! command; then echo "command failed"; exit 1; fi
, set +e
パイプを使用する場合は、command 1|command 2....|commandn結果はfalse...|true...|false....結果は正しいと考えられます.
このような状況を回避するには、オプションset-o pipefailを使用します.
ファイル名またはコマンドラインパラメータにスペースを使用するのが好きな場合は、shellスクリプトで「」を使用してラップしてください.
if[$filename="foo"]filenameにスペースがある場合、失敗する場合はif[$filename"="foo"]で置き換えることができます.
特に、コマンドラインパラメータに1つのパラメータにスペースが含まれている場合は、$@を取り外すときに2つのパラメータとして扱われます.「$@」を使用します.
david% foo() { for i in $@; do echo $i; done }; foo bar "baz quux"
bar
baz
quux
david% foo() { for i in "$@"; do echo $i; done }; foo bar "baz quux"
bar
baz quux
プログラムの実行中にエラーが発生して戻ってくると、一時ファイルを残すなど、システムの状態が破壊されます.trapコマンドを使用して改善することができます.
trap command signal[signal]
signalを受信するとcommandが実行され、これらの傍受を除去するにはtrap-signal
$() (`)
# both commands below print out: A-B-C-D
echo "A-`echo B-\`echo C-\\\`echo D\\\`\``"
echo "A-$(echo B-$(echo C-$(echo D)))"
[[]]( ) []
[[]] , , :
|| or( )
&& and( )
< ( )
-lt
=
== Globbing ( , )
=~ ( , )
-n
-z
-eq
-ne
:
[ "${name}" \> "a" -o ${name} \< "m" ]
[[ "${name}" > "a" && "${name}" < "m" ]]