- ベストアンサー
シェルスクリプトでコマンドを変数にした時の呼び方
- シェルスクリプトでコマンドを変数にいれる方法と、その変数を呼び出す際のエラーについて解説します。
- コマンドを変数に代入する場合、変数名の後ろに引用符をつけずに代入する必要があります。
- 変数を呼び出す場合、変数名を引用符でくくることで正常に動作します。エラーは引用符の使用方法に関連しています。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
デバグ中なら、 #!/bin/sh を #!/bin/sh -x にして実行してみるとよい。どんなコマンドが実行されるかがわかる。 たぶん、こんな感じに表示されるはず + cat 'grep '\''^[0-9]'\'' /home/hoge/test.nicdf' 最初の+はただの目印なのです。 あなたは、grep を使うときにこのような入力をしますか?ってことです
その他の回答 (4)
- pakuti
- ベストアンサー率50% (317/631)
何を勘違いしているかはわかりました ${GREP} '^[0-9]' /home/hoge/test.nicdf とだけ書けばOKです
- nora1962
- ベストアンサー率60% (431/717)
> どう書けば、エラーにならずに正常に動作するでしょうか? それはどういう動作が「正常」なのかという仕様によります。 単純に「/home/hoge/test.nicdf」というファイルの中を検索したいのなら grep '^[0-9]' /home/hoge/test.nicdf でいいでしょう。 「何をやりたいのか」を説明せずに、「エラーになりました。直してください」では手の出しようがありません。
- Tacosan
- ベストアンサー率23% (3656/15482)
「cat "${GREP} '^[0-9]' /home/hoge/test.nicdf"」 と書けば実行できると思ったんだよね? だとしたら当然「こう書けば実行できるはず」と思った理由があるはず. なぜ「こう書けば実行できる」と思ったのか, その思考過程を明らかにできますか? きつい言い方になるけど, 思いつきで書いてみて「できないから質問する」だけでは全く勉強になりませんよ. それとも「勉強中といい続けるだけの永遠の初心者」でいるつもりですか (いや, その方が楽なんだけどねぇ)? 「バッククォートでくくる」必要すらありません>#1. というか, くくったらエラーになるような気がする.
- ID10T5
- ベストアンサー率31% (732/2312)
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 よろしくお願いします。
お礼
ご指摘ありがとうございます。 やりたいことはコマンドを変数に入れて、 OS移植したりしてもコマンドの変数中身を変えれば動作するシェルを作ることが目的です。 grep '^[0-9]' /home/hoge/test.nicdf 単純に上記のような記載ではなくてですね、 GREP="grep" cat "${GREP} '^[0-9]' /home/hoge/test.nicdf" 上記のようにコマンドを変数に入れて実行する方法を模索しております。