看板 Linux 關於我們 聯絡資訊
如下圖,我想透過迴圈把T0~T6的值給echo出來。echo ${T${i}} 方法語法不對,在不使 用bash的前提下請問有其他辦法嗎?還是echo 兩個$ $的方法就是不可行的? https://i.imgur.com/4fP9idu.jpg
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.12.89.152 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1635172961.A.102.html
creepy: for vname in T{0..6};do echo "${!vname}";done 10/25 23:10
creepy: 忘了這是bash 哈哈 10/25 23:12
rickieyang: 樓上 ! 的用途是? 10/25 23:13
kdjf: 樓上關鍵字: indirect expansion 10/25 23:13
creepy: POSIX sh要用eval的方式 搭配while迴圈 比較艱難 10/25 23:30
creepy: https://tinyurl.com/wkncyze9 我找到的 應該可以改來用 10/25 23:31
sppmg: eval echo \$T$n 這樣不知道能否 10/26 12:50
sppmg: 剛測試ok,配個 for n in {1..6} 就好 10/26 12:56
dazip8959: 謝謝上面的所有回答,目前看起來s大的方法最簡單,之前 10/26 15:33
dazip8959: 有試著加上eval 但是沒有加上\只印出i的值,請問\代表 10/26 15:33
dazip8959: 的是什麼?再次感謝回答! 10/26 15:33
rickieyang: eval 的可讀性很低,久了連自己都看不懂. 10/26 23:44
sppmg: \$ 的 \ 是跳脫字元,讓它在第一次展開時被視為純文字,第 10/27 01:15
sppmg: 二次才做為變數標記符號(不過我不知道 eval 是否只會展開 10/27 01:15
sppmg: 兩次)。 10/27 01:15
sppmg: https://stackoverflow.com/a/11065196 這裡有不錯的解釋 10/27 01:15
sppmg: 有提到如果是純變數可以用 ! 處理(不過是否是 bash only我 10/27 01:18
sppmg: 就不知道了),eval 則是更泛用的方式。 10/27 01:18
sppmg: 最後還是提一下,eval == evil ,如果不是為了相容前人的程 10/27 01:20
sppmg: 式,建議還是用陣列處理。 10/27 01:20
Gold740716: bash 才有陣列,而且寫法很醜 10/27 09:37
kdjf: 要漂亮的解法就是包進function,就能有多一次展開變數的機會 10/27 12:19
kdjf: 。不過各種東西的內外傳遞會麻煩一點 10/27 12:19