2015-02-24 72 views
0

我想通過服務器列表循環,而不是手動輸入文本文件中的每一個,我想使用表達式。問題與表達For循環 - Bash

實施例:

[[email protected] ~]$ for i in server{001..010} ; do echo $i ; done 
server001 
server002 
server003 
server004 
server005 
server006 
server007 
server008 
server009 
server010 

產生期望的結果。然而,當我把服務器{} 001..010成txt文件,並嘗試做同樣的事情,這是行不通的:

[[email protected] ~]$ cat server_test2.txt 
server{001..010} 
[[email protected] ~]$ for i in `cat server_test2.txt` ; do echo $i ; done 
server{001..010} 

正如你可以看到它實際上並沒有辦理表達我喜歡它的方式。

任何想法如何從txt文件外推多行服務器使用表達式方法? {001..010}

+0

操作順序。命令替換的輸出不是大括號擴展的。 – 2015-02-24 19:29:49

+0

請參閱http://stackoverflow.com/questions/9337489/bash-curly-brace-expansion-with-variable-for-mkdir – chrisinmtown 2015-02-24 19:33:01

+0

此處列出了擴展順序:https://www.gnu.org/software /bash/manual/bashref.html#Shell-Expansions – 2015-02-24 19:36:17

回答

0

你可以使用eval;像這樣:

list=$(cat server_test2.txt) 
CMD="for i in $list ; do echo \$i; done" 
eval $CMD 
+0

這很好,謝謝!我需要閱讀eval來理解爲什麼;) – 2015-02-24 19:46:49

+0

'man eval'應該可以幫助你:它將字符串評估爲命令。正如有關問題所指出的那樣這是一個「危險的」命令 – 2015-02-24 19:58:35