我有这个脚本来对我的文件执行某些操作。也许我对变量 $dir 有问题,因为当我在脚本上使用它时,我不知道什么是正确的字符。
for dir in *; do
cd $dir; flapwater -lp ../../ligands/"$dir.mol2" ../A2a1071_PEP_REC.pdb "A2a1071_$dirDock_Complex.pdb";
flapwater -w-auto -i "A2a1071_"$dirDock_Complex.pdb" -o "WF_$dir.pdb" -gl ../../ligands/"$dir.mol2" -gr 6 > WF.log;
cd .. ;
done
例子:
如果变量是 $dir = 4a 脚本应该是:
for dir in *; do
cd $dir; flapwater -lp ../../ligands/4a.mol2 ../A2a1071_PEP_REC.pdb A2a1071_4aDock_Complex.pdb;
flapwater -w-auto -i A2a1071_4aDock_Complex.pdb -o WF_4a.pdb -gl ../../ligands/4a.mol2 -gr 6 > WF.log;
cd .. ;
done
有人可以解释一下 $dir 的写入用法吗?
答案1
Bash 无法判断$dirDock_Complex
是变量名还是变量名的一部分(因此它总是使用尽可能长的名称)。使用花括号分隔变量名。
cd
另外,即使目录名称包含空格,也可以用双引号将该变量括起来。
for dir in * ; do
cd -- "$dir" || continue # Double quotes.
flapwater -lp ../../ligands/"$dir.mol2" ../A2a1071_PEP_REC.pdb "A2a1071_${dir}Dock_Complex.pdb" # Curlies.
flapwater -w-auto -i "A2a1071_${dir}Dock_Complex.pdb" -o "WF_$dir.pdb" -gl "../../ligands/$dir.mol2" -gr 6 > WF.log # curlies
cd .. || break
done