作者guessi (没)
站内Linux
标题Re: [问题] shell script 变数问题
时间Wed Jan 22 22:20:47 2014
当有变数存在时
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
1F:推 zhucc:大感谢、又学到一样了 01/23 01:10