Shell 中的引用傳遞

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安全問題

TAG:Linux | shell腳本 | Bash |