[script] $用法

看板Linux作者 (NCTU蕭)時間2年前 (2021/10/25 22:42), 編輯推噓10(10013)
留言23則, 6人參與, 2年前最新討論串1/1
如下圖,我想透過迴圈把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

10/25 23:10, 2年前 , 1F
for vname in T{0..6};do echo "${!vname}";done
10/25 23:10, 1F

10/25 23:12, 2年前 , 2F
忘了這是bash 哈哈
10/25 23:12, 2F

10/25 23:13, 2年前 , 3F
樓上 ! 的用途是?
10/25 23:13, 3F

10/25 23:13, 2年前 , 4F
樓上關鍵字: indirect expansion
10/25 23:13, 4F

10/25 23:30, 2年前 , 5F
POSIX sh要用eval的方式 搭配while迴圈 比較艱難
10/25 23:30, 5F

10/25 23:31, 2年前 , 6F
https://tinyurl.com/wkncyze9 我找到的 應該可以改來用
10/25 23:31, 6F

10/26 12:50, 2年前 , 7F
eval echo \$T$n 這樣不知道能否
10/26 12:50, 7F

10/26 12:56, 2年前 , 8F
剛測試ok,配個 for n in {1..6} 就好
10/26 12:56, 8F

10/26 15:33, 2年前 , 9F
謝謝上面的所有回答,目前看起來s大的方法最簡單,之前
10/26 15:33, 9F

10/26 15:33, 2年前 , 10F
有試著加上eval 但是沒有加上\只印出i的值,請問\代表
10/26 15:33, 10F

10/26 15:33, 2年前 , 11F
的是什麼?再次感謝回答!
10/26 15:33, 11F

10/26 23:44, 2年前 , 12F
eval 的可讀性很低,久了連自己都看不懂.
10/26 23:44, 12F

10/27 01:15, 2年前 , 13F
\$ 的 \ 是跳脫字元,讓它在第一次展開時被視為純文字,第
10/27 01:15, 13F

10/27 01:15, 2年前 , 14F
二次才做為變數標記符號(不過我不知道 eval 是否只會展開
10/27 01:15, 14F

10/27 01:15, 2年前 , 15F
兩次)。
10/27 01:15, 15F

10/27 01:15, 2年前 , 16F
https://stackoverflow.com/a/11065196 這裡有不錯的解釋
10/27 01:15, 16F

10/27 01:18, 2年前 , 17F
有提到如果是純變數可以用 ! 處理(不過是否是 bash only我
10/27 01:18, 17F

10/27 01:18, 2年前 , 18F
就不知道了),eval 則是更泛用的方式。
10/27 01:18, 18F

10/27 01:20, 2年前 , 19F
最後還是提一下,eval == evil ,如果不是為了相容前人的程
10/27 01:20, 19F

10/27 01:20, 2年前 , 20F
式,建議還是用陣列處理。
10/27 01:20, 20F

10/27 09:37, 2年前 , 21F
bash 才有陣列,而且寫法很醜
10/27 09:37, 21F

10/27 12:19, 2年前 , 22F
要漂亮的解法就是包進function,就能有多一次展開變數的機會
10/27 12:19, 22F

10/27 12:19, 2年前 , 23F
。不過各種東西的內外傳遞會麻煩一點
10/27 12:19, 23F
文章代碼(AID): #1XTi9X42 (Linux)