[問題] bash 參數傳遞問題

看板Linux作者 (尋找)時間15年前 (2010/11/12 15:39), 編輯推噓1(109)
留言10則, 2人參與, 最新討論串1/1
大家好 想請教關於 bash script 參數傳遞問題 目前有兩隻 script a.sh: nfsroot="-kernel vmlinuz -append 'root=/dev/nfs nfsroot=$ip:/'" disk="-drive file=$1" $arg="$disk $nfsroot" /root/b.sh $arg b.sh: echo "num of arg:$#" 當執行$ ./a.sh num of arg:7 但預期應該是要 6 因為 nfsroot 後面的 'root=.. nfsroot=..' 被當成兩個參數來傳遞了 分別為 'root=/dev/nfs 和 nfsroot=$ip:/' 請問有辦法讓變數傳遞時不要拆成兩個嘛? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.109.23.221

11/12 15:44, , 1F
/root/b.sh "$arg"
11/12 15:44, 1F

11/12 17:38, , 2F
因為有些參數要在a.sh自動產生, 所以還需有a.sh
11/12 17:38, 2F

11/12 17:39, , 3F
直接./b.sh "$args" 會把所有參數視為一個會出錯
11/12 17:39, 3F

11/12 20:24, , 4F
我耍笨了 你可以把變數用array傳
11/12 20:24, 4F

11/12 20:32, , 5F
nfsroot=(-kernel .... 'root=/dev/nfs nfsroot=$ip:/')
11/12 20:32, 5F

11/12 20:33, , 6F
接下來用 "${nfsroot[@]}" 叫出來時就會和原本的一樣了
11/12 20:33, 6F

11/12 20:35, , 7F
t=( a b c ); cnt () { echo $#; }; cnt "${t[@]}"
11/12 20:35, 7F

11/12 20:35, , 8F
ans = 3
11/12 20:35, 8F

11/12 20:35, , 9F
t=( a 'b c' ); cnt () { echo $#; }; cnt "${t[@]}"
11/12 20:35, 9F

11/12 20:35, , 10F
ans = 2
11/12 20:35, 10F
文章代碼(AID): #1CtEyace (Linux)