shell script 變數問題 - Linux

Sarah avatar
By Sarah
at 2014-01-23T14:56

Table of Contents

你好、想再請教一下
今天我輸出的時候也想利用迴圈的方式輸出
所以我寫成下面這樣

file=/root/zh/pp/file.log
for q in 1 2 3; do
eval TMP${q}="/root/zh/pp/pg${q}.tmp"
done

for j in 1 2 3; do
eval "cat $TMP$j >> $file"
done

但是實際執行時又出現問題了
+ for j in 1 2 3
+ eval 'cat 1 >> /root/zh/pp/file.log'
++ cat 1
cat: 1: No such file or directory

請問又該如何修正?

※ 引述《guessi (沒)》之銘言:
: 當有變數存在時 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

--
Tags: Linux

All Comments

安裝軟體的路徑錯誤

Susan avatar
By Susan
at 2014-01-23T13:48
剛剛製作了一個 Fedora 適用的套件 https://build.opensuse.org/package/show/home:bluebat/talys 基本上不需要 talys.setup 而只需 cd source sed -i and#39;s|/home/finux01b/akoning/ta ...

新增模組

Andy avatar
By Andy
at 2014-01-23T13:11
抱歉想問個問題 我想自己新增模組到核心內,首先我先到目標目錄新增一個A.c檔 之後在此目錄的 Kconfig 新增 config TEST tristate and#34;C testand#34; 然後到此目錄的 makefile 打上 obj-$(CONFIG_TEST) +=A ...

Web Service 架站實務

Audriana avatar
By Audriana
at 2014-01-23T01:33
想請教一下 本身是software developer 未來想走技術經理的路 所以想暸解各技術的實務 當然不可能說熟到很厲害 這邊想暸解Web Service相關的實務 不知有沒有比較推薦的書籍或網站 Detail部份: 大致想知道流量統計、記憶體、CPU相對於連線數,同時在線數 DB連線數 ...

安裝軟體的路徑錯誤

Hedy avatar
By Hedy
at 2014-01-23T00:17
抱歉我重新整理發問 我要安裝一個叫talys的軟體 README裡面寫到 https://www.dropbox.com/s/k04n9m5y61c3i75/README talys.setup https://www.dropbox.com/s/ardxgrm4w1q30am/talys.setup ...

shell script 變數問題

Zanna avatar
By Zanna
at 2014-01-22T22:20
當有變數存在時 TMP${q}=something只能被當作是一般字串 而非命令 你可以試著這樣操作 並檢驗它的執行過程 echo and#34;---- start ----and#34; x=123 foo${x}bar=foobar echo and#34;${foo123bar}and#34; e ...