2015-02-12 52 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