some.sh
我有一个循环多个文件的脚本;
#!/bin/bash
path_to_destin ="/some/path/"
path_to_raw ="some/other/path"
list = "001 002 003"
for l in $list
do
mkdir $path_to_destin/output_$l
python somescript.py -input $path_to_raw/dir_$l -output $path_to_destin/output_$l/table_$l.txt
done
该脚本生成三个文件table_001.q
,table_002.q
以及table_003.q
.
循环之后,另一个脚本将这些文件作为输入,
some_other_script -i table_001.q -i table_002.q -i table_003.q -o all.q
有没有办法运行-i table_***
如所示的那么多$list
?
答案1
#!/bin/bash
indir='/some/other/path'
outdir='/some/path'
list=( 001 002 003 )
for i in "${list[@]}"; do
mkdir -p "$outdir/output_$i"
python somescript.py -input "$indir/dir_$i" -output "$outdir/output_$i/table_$i.txt"
inargs+=( -i "table_$i.q" )
done
some_other_script "${inargs[@]}" -o all.q
观察结果:
- 作业周围可能没有空间
=
。 - 缩进和空格提高了可读性。
- 不要循环字符串,而循环数组。
- 引用所有变量扩展。
关于变量扩展的引用: