1.Shell變量和Makefile變量名一樣,但是含義不一樣:
Makefile以下變量含義:
$@ :擴展爲當前規則的目標文件名;
$< :擴展爲當前規則依賴文件列表中的第一個依賴文件;
$? :擴展爲所有的修改日期比當前規則的目標文件的創建日期更晚的依賴文件,該值只有 在使用顯式規則時纔會被使用;
$*: 擴展成當前規則中目標文件和依賴文件共享的文件名,不含擴展名;
$^ :擴展爲整個依賴文件的列表 (除掉了所有重複的文件名)。
shell腳步以下變量含義:
$$ :Shell本身的PID(ProcessID)
$! :Shell最後運行的後臺Process的PID
$? :最後運行的命令的結束代碼(返回值)
$- :使用Set命令設定的Flag一覽
$* :所有參數列表。如"$*"用「"」括起來的情況、以"$1
$2 … $n"的形式輸出所有參數。
$@ :所有參數列表。如"$@"用「"」括起來的情況、以"$1"
"$2" … "$n" 的形式輸出所有參數。
$# :添加到Shell的參數個數 ($0不算一個參數)
$0 :Shell本身的文件名
$1~$n :添加到Shell的各參數值。$1是第1參數、$2是第2參數…。
2.shell命令
1)sed -e表示將下一個字符串解析爲sed編輯命令,如果只傳遞一個編輯命令給sed,-e選項可以省略
2)tr命令可以對來自標準輸入的字符進行替換、壓縮和刪除。它可以將一組字符變成另一組字符
[:alnum:]:字母和數字
[:alpha:]:字母
[:cntrl:]:控制(非打印)字符
[:digit:]:數字
[:graph:]:圖形字符
[:lower:]:小寫字母
[:print:]:可打印字符
[:punct:]:標點符號
[:space:]:空白字符
[:upper:]:大寫字母
[:xdigit:]:十六進制字符
eg:$(shell uname -s | tr '[:upper:]' '[:lower:]' | sed -e 's/\(cygwin\).*/cygwin/')
表示將輸入的大寫字符替換成小寫字符。
3)egrep -i "^[[:space:]]*${2}[[:space:]]" boards.cfg` -i表示查找字符串,忽略大小寫
4)set ${line}將line的變量值覆蓋原先腳步的命令行參數,成爲新的命令行參數
5)${1%_config}意思是將$1的字符串右邊拿掉"_config"(如果有的話)
6)$(@:_config=)表示將$@變量中的_config替換爲空