国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
shell特定變量和Makefile中自動化變量的對比記憶
 經常在shell命令行見到$*,$#,$@...這些特定變量,還有在Makefile中看到一些以$開頭的自動化變量,為了方便記憶,不產生混淆,特總結出來,希望可以給大家?guī)硪恍椭?/div>
1.     shell中特定的變量
$#   傳遞到腳本的參數(shù)個數(shù)
$*    以一個單字符串顯示所有向腳本傳遞的參數(shù)。與位置變量不同,此選項參數(shù)可超過9個
$$    腳本運行的當前進程PID號
$!     后臺運行的最后一個進程的進程號
$@   與$*相同,但是使用時用雙引號,并將各個參數(shù)加雙引號返回
$-     顯示shell使用的當前選項,與set命令功能相同
$_    上一個命令的最后一個參數(shù)
$?     顯示最后命令的退出狀態(tài),0表示執(zhí)行成功 ,其他值有問題
$0     腳本名稱
$1...$9    位置參數(shù)
測試腳本如下
#vim test
#!/bin/bash
echo $0
echo $*
echo $@
echo $#
echo $$
ls -a /home
echo $_
#chmod +x test
#./test -a -b -c /home
./test
-a -b -c /home/
-a -b -c /home/
4
20814
.  ..  qxl
/home
#echo $?
0
#ls -a /home &
[1] 20838
#.  .. qxl
[1]+ Done                  ls --color=tty -a /home
#echo $!
20838
2    Makefile中自動化變量
$@
表示規(guī)則中的目標文件集。在模式規(guī)則中,如果有多個目標,那么,"$@"就是匹配于
目標中模式定義的集合。
$%
僅當目標是函數(shù)庫文件中,表示規(guī)則中的目標成員名。例如,如果一個目標是"foo.a (bar.o)",那么,"$%"就是"bar.o","$@"就是"foo.a"。如果目標不是函數(shù)庫文件(Unix下是[.a],Windows下是[.lib]),那么,其值為空。
$<
依賴目標中的第一個目標名字。如果依賴目標是以模式(即"%")定義的,那么"$<"將是符合模式的一系列的文件集。注意,其是一個一個取出來的。
$?
所有比目標新的依賴目標的集合。以空格分隔。
$^
所有的依賴目標的集合。以空格分隔。如果在依賴目標中有多個重復的,那個這個變量會去除重復的依賴目標,只保留一份。
$+
這個變量很像"$^",也是所有依賴目標的集合。只是它不去除重復的依賴目標。
$*
這個變量表示目標模式中"%"及其之前的部分。如果目標是"dir/a.foo.b",并且目標的模式是"a.%.b",那么,"$*"的值就是"dir/a.foo"。這個變量對于構造有關聯(lián)的文件名是比較有較。如果目標中沒有模式的定義,那么"$*"也就不能被推導出,但是,如果目標文件的后綴是make所識別的,那么"$*"就是除了后綴的那一部分。例如:如果目標是"foo.c",因為".c"是make所能識別的后綴名,所以,"$*"的值就是"foo"。這個特性是GNU make的,很有可能不兼容于其它版本的make,所以,你應該盡量避免使用"$*",除非是在隱含規(guī)則或是靜態(tài)模式中。如果目標中的后綴是make所不能識別的,那么"$*"就是空值。

當你希望只對更新過的依賴文件進行操作時,"$?"在顯式規(guī)則中很有用,例如,假設有一個函數(shù)庫文件叫"lib",其由其它幾個object文件更新。那么把object文件打包的比較有效率的Makefile規(guī)則是:
lib : foo.o bar.o lose.o win.o
ar r lib $?
在上述所列出來的自動量變量中。四個變量($@、$<、$%、$*)在擴展時只會有一個文件,而另三個的值是一個文件列表。這七個自動化變量還可以取得文件的目錄名或是在當前目錄下的符合模式的文件名,只需要搭配上"D"或"F"字樣。這是GNU make中老版本的特性,在新版本中,我們使用函數(shù)"dir"或"notdir"就可以做到了。"D"的含義就是Directory,就是目錄,"F"的含義就是File,就是文件。
下面是對于上面的七個變量分別加上"D"或是"F"的含義:
$(@D)
表示"$@"的目錄部分(不以斜杠作為結尾),如果"$@"值是"dir/foo.o",那么"$(@D)"就是"dir",而如果"$@"中沒有包含斜杠的話,其值就是"."(當前目錄)。
$(@F)
表示"$@"的文件部分,如果"$@"值是"dir/foo.o",那么"$(@F)"就是"foo.o","$(@F)"相當于函數(shù)"$(notdir $@)"。
"$(*D)"
"$(*F)"
和上面所述的同理,也是取文件的目錄部分和文件部分。對于上面的那個例子,"$(*D)"返回"dir",而"$(*F)"返回"foo"
"$(%D)"
"$(%F)"
分別表示了函數(shù)包文件成員的目錄部分和文件部分。這對于形同"archive(member)"形式的目標中的"member"中包含了不同的目錄很有用。
"$(<D)"
"$(<F)"
分別表示依賴文件的目錄部分和文件部分。
"$(^D)"
"$(^F)"
分別表示所有依賴文件的目錄部分和文件部分。(無相同的)
"$(+D)"
"$(+F)"
分別表示所有依賴文件的目錄部分和文件部分。(可以有相同的)
"$(?D)"
"$(?F)"
分別表示被更新的依賴文件的目錄部分和文件部分。
最后想提醒一下的是,對于"$<",為了避免產生不必要的麻煩,我們最好給$后面的那個特定字符都加上圓括號,比如,"$(<)"就要比"$<"要好一些

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/peking2008xiaoxin/archive/2009/11/10/4792844.aspx
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服