BASH 讀取傳入值的坑

那些年的心酸血淚

ta-ching chen

1 minute read

 文章目錄

前言 

進入正題前想到這則推特,真是心情寫照阿!

辛酸血淚 

最近利用 bash 寫測試程式,需要將參數傳入 function 內

#!/bin/bash
test() {
    echo $1
}
test "foobar"

今天卻遇到個百思不得其解的問題,程式、參數大致看起來沒有問題

#!/bin/bash
test() {
    echo $1 $2 ... $9 $10
}
test "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"

程式輸出卻變成

$ ./test.sh
a b ... i a0

第十個參數按理來說應該是 j 卻變成 a0 ?

稍微測試後發現 BASH 做語法處理時會將多位數的參數,如 $10 視為 $10

致使讀錯變數,解法也相當簡單只要用 {} 包起來避免混淆

test() {
    echo $1 $2 ... $9 ${10}
}

變數十,驅之別院 

先前在修改程式時 IDE 會協助自動上色,看到下面圖示 $10 的上色還以為 plugin 有 bug

var

殊不知是我腦袋有 bug…

comments powered by Disqus