
CentOS 6.5 32bitにてmakefileの勉強をしています。
Managing Projects with GNU Make, 3rd Editionの中で、以下のようなmakefileの記載がありました。
-----
%.d: %.c
$(CC) -M $(CPPFLAGS) $< > $@.$$$$
-----
上記の$@.$$$$ですが、$が4つ並ぶことでランダムの数字が実行時に与えられるというのは理解できました。
本やネットでこの$$$$の説明文を探すときは、どういうキーワードで探すのがいいのでしょうか?
3桁や2桁の数字も同じように$を用いて取得できるかなど知りたいと考えています。自分で実際に$@.$$$などした限りではうまく取得できていない現状です。
No.2ベストアンサー
- 回答日時:
こういう記号って、検索だと難しいですよね。
ということで、まずは、マニュアルを読むことです。
https://www.gnu.org/software/make/manual/
文章内を $$ で検索すると何箇所かヒットしますが
https://www.gnu.org/software/make/manual/make.ht …
> This special significance of ‘$’ is why you must write ‘$$’ to have the effect of a single dollar sign in a file name or recipe.
ルールに $ という文字を記述したい場合は、 $$ としなければならない、とあります。
$$$$ というのは、 コマンドラインとしては $$ という文字列になります。
コマンドを解釈するのはシェルです。
シェルでは$は変数(パラメータ)の展開に使われます。
$! などと、記号が使われることもあります。(組み込みの特殊変数です)
では、$$ は無いか、と調べると
http://linuxjm.sourceforge.jp/html/GNU_bash/man1 …
> 特殊パラメータ
シェルはいくつかのパラメータを特別扱いします。 このようなパラメータは参照されるだけであり、 値を代入することは許されません。
> $
> シェルのプロセス ID に展開されます。 () を使ったサブシェルの内部では、$ はサブシェルではなく、 現在のシェルのプロセス ID に展開されます。
ということで
・ $$$$ は、 $$ としてシェルで解釈される
・$$はシェルでプロセスIDに展開される。 プロセスIDは実行のたびに変化するので、ランダムに見える。
ということがわかります
回答ありがとうございます。
マニュアルのリンク情報ありがとうございます。今後、このマニュアルも読んでいきたいと思います。
> $$$$ というのは、 コマンドラインとしては $$ という文字列になります。
なるほどです。
「特殊パラメータ」というキーワードで探せば、関連する情報にたどり着けたのですね。
勉強になりました。ありがとうございます。
No.3
- 回答日時:
>$が4つ並ぶことでランダムの数字が実行時に与えられるというのは理解できました。
違います。
ランダムの数字じゃなくて、その行を実行するシェルのプロセス番号です。
>本やネットでこの$$$$の説明文を探すときは、どういうキーワードで探すのがいいのでしょうか?
まずは、Makefileの書き方を調べると、コマンドの行に $ を書きたいときは $$ と2つ重ねるという事がわかると思います。
つまり $$$$ とMakefileのコマンド行に書くと、$$ がシェルに渡されます。
その $$ をシェルがどう解釈するかは、シェルのマニュアルに書いてあります。man bashとか。
回答ありがとうございます。
> ランダムの数字じゃなくて、その行を実行するシェルのプロセス番号です。
なるほどです。
シェル上のecho $$をする限りでは、同じ値になり、makefileで$$$$で実行すると違う値になるのは、シェルのプロセス番号だったからなのですね。合点がいきました。
> つまり $$$$ とMakefileのコマンド行に書くと、$$ がシェルに渡されます。
そうなのですね。
Makefileの記載がどうシェル上で処理されるかの理解がまだまだ不足しています。man bash、makeのマニュアルなど読んでいこうと思います。
No.1
- 回答日時:
>上記の$@.$$$$ですが、$が4つ並ぶことでランダムの数字が実行時に与えられるというのは理解できました。
違います。
Makefile中に書かれる
$アルファベット1文字の変数名
$(変数名)
は変数を表しますが、$$と書いた場合、文字$を表します。
また実行しようとするコマンド中に文字$などが含まれていた場合(他にも条件はあります)、
makeから直接コマンドを実行せずに /bin/sh 経由でコマンドは実行されます。
その際 $$$$ は、$$ として /bin/sh に渡されます。
ですのでシェル変数の $$ は何なのか調べてみてください。
回答ありがとうございます。
Makefile内の$$$$はシェルでは$$となるのですね。
$つきが変数というのと関連して、理解できました。
勉強になりました。ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# Makefileのechoの展開について 2 2022/07/26 07:35
- 宅地建物取引主任者(宅建) 未経験・知識ゼロからの宅建取引士勉強方法について 2 2022/06/10 14:38
- 統計学 Rを用いた「繰り返しがある直交表実験計画法」の分析方法 8 2023/08/01 17:58
- UNIX・Linux Linuxについて質問です。 以下のような設定をしたMakefileを作成するにはどう記述すればよい 1 2023/02/03 20:10
- Excel(エクセル) Excelシートのある番地の文字が一致したすべての行を別シートに転記する方法 11 2022/10/25 08:43
- 大学受験 自己推薦書の添削や意見・アドバイスお願いします 2 2022/08/27 19:34
- 大学受験 本気で困ってます! 大学受験/現代文の参考書ルートについて質問です! 現代文の参考書ルートについてで 2 2023/08/13 20:07
- Visual Basic(VBA) Powerpointでランダムな数字の結果を表示するマクロ 2 2023/08/04 10:04
- 労働相談 有給休暇使用時の賃金の計算方法について 5 2022/04/04 00:02
- 英語 提示文の構造について 3 2022/06/27 18:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UNIXのシェル、環境設定につい...
-
MySQLモニタについて
-
Cシェル内でBシェルの様な関数...
-
solarisのsetenvが無効
-
Thunderbirdで既読にしても、シ...
-
ソフトシェルセットとBOXセット
-
大手町駅。それはホームから非...
-
文化祭の書類で不備がありました
-
SONYの音楽ソフト「x-アプリ」...
-
パソコンの起動と同時にエクス...
-
「CMDにて実行するデフラグ」と...
-
差分ファイルの抽出
-
XPのHomeとProの見分け方
-
NFSでマウントできない
-
cronでの処理が途中で中断終了...
-
python IDLEで訂正、削除のやり...
-
【UNIX】unzip がcron で作動し...
-
プロセス、サービス、デーモン...
-
メッセージキュー一括削除の方法
-
LinuxでのFTP転送について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
シェル 会話形式でエンターキ...
-
export と set は違うの?
-
.cshrc ファイルについて
-
ターミナルが全く入力できない
-
Cシェル内でBシェルの様な関数...
-
ubuntuの端末の左にカレントデ...
-
シェルとシェルの間で環境変数...
-
シェルスクリプトのbashとperl...
-
Cシェルでのファイルからの入...
-
シェルスクリプトに関する問題...
-
違いについて
-
コンソールでの上下左右矢印ボ...
-
『存在するかどうか分からない...
-
31日前の日付はいつ?
-
BシェルとBashの違い
-
mac os x10.6.4のターミナルでp...
-
シェル(ksh)で変数にある文字列...
-
Tabキー補完や↑キーのヒストリ...
-
tcshなのにスクリプト構文中のs...
-
msys(cygwin)で、シェルスクリ...
おすすめ情報