プロが教える店舗&オフィスのセキュリティ対策術

はじめまして、シェルスクリプトを勉強中の者です。

コマンドを変数にいれて、まとめました。
しかしコマンドの変数を呼びこもうとするとエラーになります。

============================================
#!/bin/sh
GREP="grep"
cat "${GREP} '^[0-9]' /home/hoge/test.nicdf"
============================================


================ シェル実行結果 =============
$ ./test.sh
cat: grep '^[0-9]' /home/hoge/test.nicdf: そのようなファイルやディレクトリはありません



どう書けば、エラーにならずに正常に動作するでしょうか?
ご教授の程よろしくお願いします。

A 回答 (5件)

20年くらい前までシェル使いだったものです。



何をしたいんですか?
${GREP} '^[0-9]' /home/hoge/test.nicdfをコマンド行として認識させたいの?

だったらバッククォーテーション``で括るんですよ、確か。
`${GREP} '^[0-9]' /home/hoge/test.nicdf`

この回答への補足

アドバイスありがとうございます。

>${GREP} '^[0-9]' /home/hoge/test.nicdfをコマンド行として認識させたいの?
はい、コマンド行として認識させたいと考えております。


>だったらバッククォーテーション``で括るんですよ、確か。
>`${GREP} '^[0-9]' /home/hoge/test.nicdf`
最初バッククォーテーションで試してみたのですがエラーになります。

エラーは下記の通りです。

-bash: command not found


よろしくお願いします。

補足日時:2011/02/09 11:01
    • good
    • 0

「cat "${GREP} '^[0-9]' /home/hoge/test.nicdf"」


と書けば実行できると思ったんだよね? だとしたら当然「こう書けば実行できるはず」と思った理由があるはず. なぜ「こう書けば実行できる」と思ったのか, その思考過程を明らかにできますか?

きつい言い方になるけど, 思いつきで書いてみて「できないから質問する」だけでは全く勉強になりませんよ. それとも「勉強中といい続けるだけの永遠の初心者」でいるつもりですか (いや, その方が楽なんだけどねぇ)?

「バッククォートでくくる」必要すらありません>#1. というか, くくったらエラーになるような気がする.
    • good
    • 0

> どう書けば、エラーにならずに正常に動作するでしょうか?


それはどういう動作が「正常」なのかという仕様によります。
単純に「/home/hoge/test.nicdf」というファイルの中を検索したいのなら
grep '^[0-9]' /home/hoge/test.nicdf
でいいでしょう。

「何をやりたいのか」を説明せずに、「エラーになりました。直してください」では手の出しようがありません。
    • good
    • 0
この回答へのお礼

ご指摘ありがとうございます。

やりたいことはコマンドを変数に入れて、
OS移植したりしてもコマンドの変数中身を変えれば動作するシェルを作ることが目的です。

grep '^[0-9]' /home/hoge/test.nicdf
単純に上記のような記載ではなくてですね、


GREP="grep"
cat "${GREP} '^[0-9]' /home/hoge/test.nicdf"
上記のようにコマンドを変数に入れて実行する方法を模索しております。

お礼日時:2011/02/09 13:34

何を勘違いしているかはわかりました



${GREP} '^[0-9]' /home/hoge/test.nicdf

とだけ書けばOKです
    • good
    • 0

デバグ中なら、


#!/bin/sh

#!/bin/sh -x
にして実行してみるとよい。どんなコマンドが実行されるかがわかる。

たぶん、こんな感じに表示されるはず
+ cat 'grep '\''^[0-9]'\'' /home/hoge/test.nicdf'

最初の+はただの目印なのです。

あなたは、grep を使うときにこのような入力をしますか?ってことです
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!