作者dazip8959 (NCTU萧)
看板Linux
标题[script] $用法
时间Mon Oct 25 22:42:39 2021
如下图,我想透过回圈把T0~T6的值给echo出来。echo ${T${i}} 方法语法不对,在不使
用bash的前提下请问有其他办法吗?还是echo 两个$ $的方法就是不可行的?
https://i.imgur.com/4fP9idu.jpg
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 101.12.89.152 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Linux/M.1635172961.A.102.html
1F:推 creepy: for vname in T{0..6};do echo "${!vname}";done 10/25 23:10
2F:推 creepy: 忘了这是bash 哈哈 10/25 23:12
3F:推 rickieyang: 楼上 ! 的用途是? 10/25 23:13
4F:推 kdjf: 楼上关键字: indirect expansion 10/25 23:13
5F:推 creepy: POSIX sh要用eval的方式 搭配while回圈 比较艰难 10/25 23:30
7F:推 sppmg: eval echo \$T$n 这样不知道能否 10/26 12:50
8F:→ sppmg: 刚测试ok,配个 for n in {1..6} 就好 10/26 12:56
9F:→ dazip8959: 谢谢上面的所有回答,目前看起来s大的方法最简单,之前 10/26 15:33
10F:→ dazip8959: 有试着加上eval 但是没有加上\只印出i的值,请问\代表 10/26 15:33
11F:→ dazip8959: 的是什麽?再次感谢回答! 10/26 15:33
12F:推 rickieyang: eval 的可读性很低,久了连自己都看不懂. 10/26 23:44
13F:推 sppmg: \$ 的 \ 是跳脱字元,让它在第一次展开时被视为纯文字,第 10/27 01:15
14F:→ sppmg: 二次才做为变数标记符号(不过我不知道 eval 是否只会展开 10/27 01:15
15F:→ sppmg: 两次)。 10/27 01:15
17F:→ sppmg: 有提到如果是纯变数可以用 ! 处理(不过是否是 bash only我 10/27 01:18
18F:→ sppmg: 就不知道了),eval 则是更泛用的方式。 10/27 01:18
19F:→ sppmg: 最後还是提一下,eval == evil ,如果不是为了相容前人的程 10/27 01:20
20F:→ sppmg: 式,建议还是用阵列处理。 10/27 01:20
21F:推 Gold740716: bash 才有阵列,而且写法很丑 10/27 09:37
22F:推 kdjf: 要漂亮的解法就是包进function,就能有多一次展开变数的机会 10/27 12:19
23F:→ kdjf: 。不过各种东西的内外传递会麻烦一点 10/27 12:19