サーチ…
変数を割り当てるときの空白
空白は変数を割り当てるときに重要です。
foo = 'bar' # incorrect foo= 'bar' # incorrect foo='bar' # correct
最初の2つは構文エラーになります(または悪いことに、不正なコマンドを実行します)。最後の例は、変数$foo
をテキスト "bar"に正しく設定します。
ファイルの最後の行が見つからない
Cの標準では、ファイルは改行で終わらなければならないと言われています。そのため、EOFが行末に来ると、その行はいくつかのコマンドで見逃されることはありません。例として:
$ echo 'one\ntwo\nthree\c' > file.txt $ cat file.txt one two three $ while read line ; do echo "line $line" ; done < file.txt one two
上記の例で正しく動作するようにするには、最後の行が空でない場合にループを継続するようにテストを追加します。
$ while read line || [ -n "$line" ] ; do echo "line $line" ; done < file.txt one two three
失敗したコマンドはスクリプトの実行を停止しません
ほとんどのスクリプト言語では、関数呼び出しが失敗すると、例外をスローしてプログラムの実行を停止することがあります。 Bashコマンドには例外はありませんが、終了コードがあります。 0でない終了コードは失敗を通知しますが、0以外の終了コードはプログラムの実行を停止しません。
これは危険な(確かに考案されたものの)状況につながります。
#!/bin/bash
cd ~/non/existent/directory
rm -rf *
場合はcd
このディレクトリへの-ingが失敗し、bashは失敗を無視し、スクリプトを実行した場所からディレクトリをきれいに拭い、次のコマンドを上に移動します。
この問題を処理する最良の方法は、 setコマンドを使用することです。
#!/bin/bash
set -e
cd ~/non/existent/directory
rm -rf *
set -e
コマンドが0以外のステータスを返した場合、直ちにスクリプトを終了するように指示します。
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow