[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[linux-users:83056] Re: shのスクリプトのトラブル


佐野@浜松です。

In <200104280156.f3S1u2T00698 _at_ vega.ict.ne.jp>,
  on "Sat, 28 Apr 2001 10:56:05 +0900',
   with "Re: shのスクリプトのトラブル",
 cbtown <cbtown _at_ ict.ne.jp> さん wrote:

> >  >>   40行目のエラーは、ダブルクオーテーションが対になっていないというエラー
> >  >> だと解釈していますが、当該の部分では、きちんとついになっております。
> >  >> 
> >  >> if [ find_new_file == "" ] #original function
> > 
> > その直前の
> > 
> >  || #### back up 作業 ####
> >  || if [ -f "$ARV_FILE.tar.gz" ] || [ -f "$ARV_FILE.afz ]
> > 
> > で後半の [] 内で double quotation mark が一つ欠けてますね。
> > このせいで次の quotation mark でひっかかってしまってるわけです。

> #でも何で、それ以降の行でえらーになるんだろう…。

ちゃんと「このせいで」って書いてありますよ ?

「後半の [] 内で double quotation mark が一つ欠けて」いるというのは
人間が想像力を働かせて作成者の意図を推理したからわかることであって
機械的に文法チェックした場合には " と " の間に改行や [ やその他の
記号が含まれていても全然問題ありませんから。

例えば

$ cat test.sh
#!/bin/sh

echo "test
this is test
if [ -f test.sh ]
 then
   echo "aruyo!"
 else
   echo "naiyo!"
fi
"
exit 0

こんなの作って試してみたら、 echo "test の行から最後から
ひとつ前の " の行までの間がすべて何のエラーも無く表示されます。

特に意味の無いコードですが、文法的には間違ってはいませんから。

ここで最後の " だけの行を削除すると、同様に「" が足りないよ」と
いうエラーになります。(さらに最後の exit 0 の後に " を追加すると
exit 0 まで一緒に表示されるようになります。)

間違いが見つかって初めてエラーとして検出されるので、文法的に
正しい範囲内ではエラーになりません (逆に正しいはずのコードを
勝手な推理でエラーにされたらそっちのほうが問題でしょ ? わざと
おかしなことをさせようという場合もあるかもしれないし :)

-- 
     # (わたしのおうちは浜松市、「夜のお菓子」で有名さ。)
    <kgh12351 _at_ nifty.ne.jp> : Taketoshi Sano (佐野 武俊)

この情報があなたの探していたものかどうか選択してください。
yes/まさにこれだ!   no/違うなぁ   part/一部見つかった   try/これで試してみる

あなたが探していた情報はどのようなことか、ご自由に記入下さい。特に「まさにこれだ!」と言う場合は記入をお願いします。
例:「複数のマシンからCATV経由でipmasqueradeを利用してWebを参照したい場合の設定について」
References: