在v2ex看到乙個問題:
允許在乙個命令之前立即發生乙個或多個變數賦值,這些賦值為跟隨著的命令更改環境變數,這個賦值的影響是暫時的。那為什麼:
int=100
int=10 echo $(($int - 10))
結果是 90 而不是 0
其實是這樣:
int=100int=10 echo $(($int - 10))
echo $int
sh -x 輸出:
+ int=100
+ int=10 echo 90
90 + echo 100
100
-----------------------------------------
int=100
int=10 echo $((int=$int - 10))
echo $int
sh -x 輸出:
+ int=100
+ int=10 echo 90
90 + echo 90
90 -----------------------------------------
int=100
xx=10 echo $((int=$int - 10))
echo $int
echo $xx
sh -x 輸出:
+ int=100
+ xx=10 echo 90
90 + echo 90
90 + echo
所以:
int=100int=10 echo $(($int - 10))
echo int
等同於:
parent=100
child=10 echo $(($parent-10))
echo $parent
輸出:
+ parent=100
+ child=10 echo 90
90 + echo 100
100
--------------------------------------------
下面這行
int=10 echo $(($int - 10))
其實是開了乙個新的子環境,並且子環境可以訪問全部父環境變數
因為「允許在乙個命令之前立即發生乙個或多個變數賦值」
所以先執行 echo 命令,然後做賦值 int=10
其實這個 int 是子環境新建的乙個變數,與主環境 int 是兩個不同的變數
換成 c 語言( linux 是 c 寫的,所以設計思想往 c 靠攏):
int num = 100;printf("%d\n",num);
輸出:
90 100
學過 c 的都應該知道,子作用域新建變數與父作用域變數重名時,子作用域變數會覆蓋父作用域變數
當子作用域結束時,子作用域變數被銷毀,父作用域變數恢復可見狀態,所以出現以上情況。
乙個sh指令碼 同時執行 多個sh指令碼
原來的啟動方式 cd opt openimscore pcscf.sh icscf.sh scscf.sh cd opt openimscore fhoss deploy startup.sh太過麻煩了,希望只執行乙個指令碼啟動所有的指令碼。在 opt openimscore 下,用乙個指令碼進行啟...
shell多個指令碼同時執行
1 編寫多程序實驗指令碼 demo.sh bin bash sub1.log sub2.log sub3.log function sub1 doecho date t sub1.log 注意date 和 號之間有空格。如 date m d date取 月 日 的命令列。sleep 1 done f...
Linux同時執行多條命令
一次性執行多條指令有很多好處,例如節省時間 加強指令之間的關聯 增大同事的維護難度等等。這個技巧在終端命令列和指令碼都可以用到,主要有三種體現方式 1 使用 符號執行多條指令 使用方式 cmd1 cmd2 cmd3首先執行cmd1,然後執行cmd2,最後執行cmd3。這種是aoe技能,無論你輸入多少...