--/--/--

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

2007/09/04

bash メモ

if 文の各文字列評価演算子(! と -z と -n 以外は試してないけど)にスペース区切りの文字列を直接渡すと「引数が多すぎるぞハゲ」とエラーが出る。"" で囲ってやると、これを防げる。

 1 #!/bin/bash
 2 #############################################
 3 #url:  http://ja.doukaku.org
 4 #date: 2007年  9月  3日 月曜日 23:23:23 JST
 5 #############################################
 6 
 7 #重複のない配列(ただのスペース区切りの文字列だけど)を
 8 #作る関数
 9 function uniq () {
10     result=""
11     for c in $@; do
12         if [ ! "$(echo $result | grep $c)" ]; then
13         #if [ ! $(echo $result | grep $c) ]; then #これはエラー
14             result=$result\ $c
15         fi
16     done
17     echo $result
18 }
19 
20 function all_test () {
21     uniq 3 1 4 1 5 9 2 6 5
22 }
23 
24 all_test

実行結果(正しいもの)

$ ./doukaku.sh
3 1 4 5 9 2 6

実行結果(正しくないもの)

$ ./doukaku.sh
./doukaku.sh: line 13: [: 1: binary operator expected
./doukaku.sh: line 13: [: too many arguments
3 1 4 5 9 2 6
  • エラーが出ても結果が正しいのが気持ち悪い。
  • コメントの http://ja.doukaku.org のところは、このファイルがどう書く.orgの解答を書きまくる予定のファイルだから。

スポンサーサイト

comment

post




上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。