export JJJ=1234
這就是我們要把 JJJ設定成為一個環境變數值為1234 的變數
我們發現 JJJ 要在append 新的值
可以這樣
export JJJ=$JJJ:ABCD
此時 我們的 JJJ 會變成 1234:ABCD
用 env | grep "JJJ" 可以查看一下
最後 因為 JJJ一看就是測試用的
要把它清除 可以 用 unset JJJ
2016年3月9日 星期三
Linux bash shell : set declare unset
這裡實例說明一下 set declare unset 的功用
declare VAR=Test
設定一個變數 叫做 VAR 她的值 等於 Test
利用 set | vim -
檢查一下目前全部的變數清單中 是否有 VAR
set -a VAR
透過 set 把 VAR 變數 定成環境變數
ene | grep "VAR"
可以利用 env 來檢查是否有設定到
如果我不想要這個變數了
unset VAR
則 env | grep "VAR" 和 set | grep "VAR"
都會被 VAR 給消除了
export 是開大絕
直接把變數丟到環境變數裡面
declare VAR=Test
設定一個變數 叫做 VAR 她的值 等於 Test
利用 set | vim -
檢查一下目前全部的變數清單中 是否有 VAR
set -a VAR
透過 set 把 VAR 變數 定成環境變數
ene | grep "VAR"
可以利用 env 來檢查是否有設定到
如果我不想要這個變數了
unset VAR
則 env | grep "VAR" 和 set | grep "VAR"
都會被 VAR 給消除了
export 是開大絕
直接把變數丟到環境變數裡面
2016年3月7日 星期一
Makefile strip
makefile 裡面的 $(1)
按照字面上理解就是
弟一個傳進來的 argue
不過還是很抽象 就舉下列例子說明
/////// 我是 makefile ////////
define include-path-for
$(foreach n,$(1),$(patsubst $(n):%,%,$(filter $(n):%,$(pathmap_INCL))))
endef
/////// makefile 節數//////
我們在makfile 裡面 定義一個 工具
在別的 makefile 我們利用call去呼叫他
////////////// 我是另外一個 malefile ///////
LOCAL_C_INCLUDES:= \
$(call include-path-for, dbus)
/////// makefile 結束//////
這邊就可以得知 對 nclude-path-for 這個 工具而言 第一個 arguement 就是 dbus
他就會傳進去 define 裡面中的 $(1)
詳細 的出處在下面 :
define include-path-for #定义命令包, n 由调用者传递进来, 这个在 build/core/pathmap.mk
$(foreach n,$(1),$(patsubst $(n):%,%,$(filter $(n):%,$(pathmap_INCL))))
endef
// pathmap_INCL 在 build/core/pathmap.mk 文件中有定义,最后使用的时候可以看到
【函数内实现的解析】
foreach 遍历, patsubst 字符串替换, filter 过滤函数
【函数调用】
这里以external\dbus\bus 下的Android.mk 调用为例:
...
LOCAL_C_INCLUDES:= \
$(call include-path-for, dbus)
弟一個傳進來的 argue
不過還是很抽象 就舉下列例子說明
/////// 我是 makefile ////////
define include-path-for
$(foreach n,$(1),$(patsubst $(n):%,%,$(filter $(n):%,$(pathmap_INCL))))
endef
/////// makefile 節數//////
我們在makfile 裡面 定義一個 工具
在別的 makefile 我們利用call去呼叫他
////////////// 我是另外一個 malefile ///////
LOCAL_C_INCLUDES:= \
$(call include-path-for, dbus)
/////// makefile 結束//////
這邊就可以得知 對 nclude-path-for 這個 工具而言 第一個 arguement 就是 dbus
他就會傳進去 define 裡面中的 $(1)
詳細 的出處在下面 :
define include-path-for #定义命令包, n 由调用者传递进来, 这个在 build/core/pathmap.mk
$(foreach n,$(1),$(patsubst $(n):%,%,$(filter $(n):%,$(pathmap_INCL))))
endef
// pathmap_INCL 在 build/core/pathmap.mk 文件中有定义,最后使用的时候可以看到
【函数内实现的解析】
foreach 遍历, patsubst 字符串替换, filter 过滤函数
【函数调用】
这里以external\dbus\bus 下的Android.mk 调用为例:
...
LOCAL_C_INCLUDES:= \
$(call include-path-for, dbus)
foreach
foreach 函數
注意他回傳的是 text
foreach函數和別的函數非常的不一樣。因為這個函數是用來做循環用的,Makefile中的foreach函數幾乎是仿照於Unix標準Shell(/bin/sh)中的for語句,或是C-Shell(/bin/csh)中的foreach語句而構建的。它的語法是:
$(foreach <var>,<list>,<text>)
這個函數的意思是,把參數<list>中的單詞逐一取出放到參數<var>所指定的變量中,然後再執行<text>所包含的表達式。每一次<text>會返回一個字符串,循環過程中,<text>的所返回的每個字符串會以空格分隔,最後當整個循環結束時,<text>所返回的每個字符串所組成的整個字符串(以空格分隔)將會是foreach函數的返回值。
所以,<var>最好是一個變量名,<list>可以是一個表達式,而<text>中一般會使用<var>這個參數來依次枚舉<list>中的單詞。舉個例子:
names := a b c d
files := $(foreach n,$(names),$(n).o)
上面的例子中,$(name)中的單詞會被挨個取出,並存到變量「n」中,「$(n).o」每次根據「$(n)」計算出一個值,這些值以空格分隔,最後作為foreach函數的返回,所以,$(files)的值是「a.o b.o c.o d.o」。
注意,foreach中的<var>參數是一個臨時的局部變量,foreach函數執行完後,參數<var>的變量將不在作用,其作用域只在foreach函數當中
訂閱:
文章 (Atom)