调用目录和文件的变量

调用目录和文件的变量

我有这个脚本来对我的文件执行某些操作。也许我对变量 $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

相关内容