Shell 中的引用傳遞
在交換變數問題中,我們都知道值參數傳遞不能實現交換
void swap1(int a,int b)//值傳遞 ?{ int temp; temp = a; a = b; b = temp;}
解決方案是使用引用傳遞或指針傳遞
void swap2(int &a,int &b)//引用傳遞 { int temp; temp = a; a = b; b = temp;}
void swap3(int *a,int *b)//指針傳遞 { int temp; temp = *a; *a = *b; *b = temp;}
但在今天寫shell腳本的過程中我也遇到了這樣的需求,廢話不說,代碼敬上
#!/bin/sha=123b=456swap(){ eval value1=$$1 ptr1=$1 eval value2=$$2 ptr2=$2 eval $ptr1=$value2 eval $ptr2=$value1}echo a is $a #123echo b is $b #456eval swap a becho Now a is $a #456echo Now b is $b #123
學javascript的小夥伴應該很熟悉這個eval,沒錯shell中也有,而且從一定意義上兩者還有著異曲同工之妙
$1的值其實是a,$$1便可以理解為$a,加上eval之後就把$a的值拿出來了
$ptr1的值是從$1賦值來的,所以也是a,加上eval之後本來是$ptr1的值的a又可以作為變數被賦值了??
附上運算結果:
推薦閱讀:
※RancherOS架構分析
※YunOS 與 Android 有什麼關係?
※apache伺服器故障排除一例
※Linux Kernel 4.0 中的 live patching 是如何實現的?
※Linux安全問題