Re: [問題] shell script 變數問題

看板Linux作者 (釣到一隻猴子@_@)時間10年前 (2014/01/23 15:19), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串4/5 (看更多)
※ 引述《zhucc (阿朱哥)》之銘言: : 你好、想再請教一下 : 今天我輸出的時候也想利用迴圈的方式輸出 : 所以我寫成下面這樣 : 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" eval "cat \$TMP$j >> $file" : done : 但是實際執行時又出現問題了 : + for j in 1 2 3 : + eval 'cat 1 >> /root/zh/pp/file.log' 這邊就看出最後被解析成 'cat 1 >> /root/zh/pp/file.log' 你"cat $TMP$j >> $file"進到SHELL後就會被直接解析成上面了 最主要問題是 $TMP << 這個應該要再eval裡面解析 而不是在SHELL 所以要改成 \$TMP 讓SHELL知道那$不是變數開頭 只是個$字元 : ++ cat 1 : cat: 1: No such file or directory : 請問又該如何修正? --

01/05 02:28,
你聽過樹懶叫的聲音嗎?
01/05 02:28

01/05 02:30,
樓上一定聽過還敢說
01/05 02:30

01/05 02:33,
我會樹懶叫唷,樓上想聽嗎?
01/05 02:33

01/05 02:34,
樓上和樓樓上好閃
01/05 02:34

01/05 02:38,
我想起龍大和貓大決鬥旳推娃
01/05 02:38

01/05 03:19,
看來上面兩位要生小龍貓囉
01/05 03:19
-- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.202.156

01/23 15:30, , 1F
感謝、所以是 shell -> eval 的順序在解析就對了
01/23 15:30, 1F

01/23 15:30, , 2F
所以如果我在上面另外加一行 TMP=TMP 答案也會出來
01/23 15:30, 2F

01/23 15:31, , 3F
只是多此一舉而已,非常感謝
01/23 15:31, 3F

01/25 00:52, , 4F
如果是 bash,建議先採用陣列表示方式 ${TMP[$j]}
01/25 00:52, 4F
文章代碼(AID): #1IuC9oyT (Linux)
討論串 (同標題文章)
文章代碼(AID): #1IuC9oyT (Linux)