[script] $用法

楼主: dazip8959 (NCTU萧)   2021-10-25 22:42:39
如下图,我想透过循环把T0~T6的值给echo出来。echo ${T${i}} 方法语法不对,在不使
用bash的前提下请问有其他办法吗?还是echo 两个$ $的方法就是不可行的?
https://i.imgur.com/4fP9idu.jpg
作者: creepy (左招财 右纳福)   2021-10-25 23:10:00
for vname in T{0..6};do echo "${!vname}";done忘了这是bash 哈哈
作者: rickieyang (Rickie Yang)   2021-10-25 23:13:00
楼上 ! 的用途是?
作者: kdjf (我抓得到什么呢?)   2021-10-25 23:13:00
楼上关键字: indirect expansion
作者: creepy (左招财 右纳福)   2021-10-25 23:30:00
POSIX sh要用eval的方式 搭配while循环 比较艰难https://tinyurl.com/wkncyze9 我找到的 应该可以改来用
作者: sppmg (sppmg)   2021-10-26 12:50:00
eval echo \$T$n 这样不知道能否刚测试ok,配个 for n in {1..6} 就好
楼主: dazip8959 (NCTU萧)   2021-10-26 15:33:00
谢谢上面的所有回答,目前看起来s大的方法最简单,之前有试着加上eval 但是没有加上\只印出i的值,请问\代表的是什么?再次感谢回答!
作者: rickieyang (Rickie Yang)   2021-10-26 23:44:00
eval 的可读性很低,久了连自己都看不懂.
作者: sppmg (sppmg)   2021-10-27 01:15:00
\$ 的 \ 是跳脱字符,让它在第一次展开时被视为纯文字,第二次才做为变量标记符号(不过我不知道 eval 是否只会展开两次)。https://stackoverflow.com/a/11065196 这里有不错的解释有提到如果是纯变量可以用 ! 处理(不过是否是 bash only我就不知道了),eval 则是更泛用的方式。最后还是提一下,eval == evil ,如果不是为了相容前人的程式,建议还是用阵列处理。
作者: Gold740716 (项为之强)   2021-10-27 09:37:00
bash 才有阵列,而且写法很丑
作者: kdjf (我抓得到什么呢?)   2021-10-27 12:19:00
要漂亮的解法就是包进function,就能有多一次展开变量的机会。不过各种东西的内外传递会麻烦一点

Links booklink

Contact Us: admin [ a t ] ucptt.com