Re: [問題] shell script 變數問題

看板Linux作者 (沒)時間12年前 (2014/01/22 22:20), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/5 (看更多)
當有變數存在時 TMP${q}=something只能被當作是一般字串 而非命令 你可以試著這樣操作 並檢驗它的執行過程 echo "---- start ----" x=123 foo${x}bar=foobar echo "${foo123bar}" echo "---- end ----" 接著執行它 (黃字為執行過程 而白字為執行輸出) + echo '---- start ----' ---- start ---- + x=123 + foo123bar=foobar <--- 這裡的"foobar123=foobar"被解讀為function的名稱 line 5: foo123bar=foobar: command not found + echo <--- 由於前一行已經失敗 所以foo123bar只會是個不存在的變數 就報錯啦! + echo '---- end ----' ---- end ---- 這邊你需要的是eval幫你將字串轉換為執行命令 (詳細請查man eval) 也就是改寫成下面這樣 ----8<----8<----8<----8<----8<----8<----8<----8<---- for q in 1 2 3 4; do eval TMP${q}="/root/zh/pp/pg${q}.tmp" done # 驗證輸出 就會是你想要的結果啦~ echo ${TMP1} ${TMP2} ${TMP3} ${TMP4} ---->8---->8---->8---->8---->8---->8---->8---->8---- ※ 引述《zhucc (阿朱哥)》之銘言: : 想請教一下為何下列第二和第三種方法會顯示錯誤訊息 : 1. : TMP1=/root/zh/pp/pg1.tmp : TMP2=/root/zh/pp/pg2.tmp : 2. : q=1 : while [ "$q" -le "4" ];do : TMP${q}=/root/zh/pp/pg${q}.tmp : q=`expr $q + 1` : done : 3. : for q in 1 2 3 4 : do : TMP$q=/root/zh/pp/pg$q.tmp : done : 第二和第三錯誤訊息都是 : + TMP1=/root/zh/pp/pg.tmp : pp.sh: line 4: TMP1=/root/zh/pp/pg1.tmp: No such file or directory : + TMP2=/root/zh/pp/pg2.tmp : pp.sh: line 4: TMP2=/root/zh/pp/pg2.tmp: No such file or directory -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 124.155.177.78

01/23 01:10, , 1F
大感謝、又學到一樣了
01/23 01:10, 1F
文章代碼(AID): #1ItzF3jH (Linux)
文章代碼(AID): #1ItzF3jH (Linux)