2015-02-12 51 views
0

因此,我開始在學習bash的測試環境中取得一些體面的進展。我仍然非常瞭解基本面,並且現在谷歌搜索了大約一個小時。在括號內使用BASH變量{}

我想創建基本上所有部分的變量,所以它很容易改變 - 從目錄到文件路徑名。

**

My current code: 
parent_directory='/home/local/test_scripts' 
directory_name='app_ms' 
directory_output='1..4' 
file_name='test' 
file_output='log,out' 
file_repeat='1..10' 
mkdir -p $parent_directory $parent_location/$directory_name{directory_output}; 
touch $parent_directory/$parent_location/$directory_name{directory_output}/$file_name{file_output} $file_name{file_output}.{file_repeat} 

**

直到當我unclude括號的點 - {} file_repeat,一切都按我預期它。

理想情況下,我想輸出來表示:

**mkdir -p /home/local/test_scripts /home/local/test_scripts/app_ms{1..4} 
touch /home/local/test_script/app_ms{1..4}/test.{log, out} 
touch /home /local/test_script/app_ms{1..4}/test.{log, out}.{1..4}** 

TL; DR:有什麼想對括號內創建多個文件時,我錯過?當我在裏面調用一個變量時,當我使用變量調用方法時,它只創建一個名爲「app_ms {1..4}」的目錄。如果我直接輸入它,它將創建app_ms1,app_ms2,app_ms3和app_ms4,並在文件夾內創建所需的所有文件。

+0

BashPitfalls#33:http://mywiki.wooledge.org/BashPitfalls#for_i_in_.7B1...24n.7D – 2015-02-12 04:39:04

+0

BTW,你」這裏還有其他一些與引用問題有關的錯誤。通過http://shellcheck.net/運行你的代碼是一個好主意。 – 2015-02-12 04:40:25

回答

0

擴展訂單不會這樣工作。可變擴展的結果不會擴展。所以你可以得到這些字符串作爲輸出,但你不能(沒有你不想要的eval)讓shell以這種方式運行它們。

的更多細節和它們在執行順序見Shell Expansions

+0

好的。我會看看這個。我或多或少地選擇了這種方式來儘可能深入地學習。希望找到一個解決方案,可以讓我做到這一點。謝謝! – jdspringr07 2015-02-12 04:32:27

+0

'eval'可以讓你做到這一點,但'eval'是邪惡的,並且容易打開**空隙**安全漏洞並導致其他問題。 – 2015-02-12 04:33:30