2012-07-17 51 views
2

我想知道,如果重复使用相同的变量会导致一个bash脚本的任何不可预见的事件重复使用的变量。就是它通常被视为一个好的做法呢?在bash

为了使我的查询的详细更清晰一点。

我有一个脚本这是这样的:

max=`cat loc1.c | wc -l` 
bar=1   

while [ $bar -lt $max ] 
do 

    f1=`awk -v vr1=$bar 'NR == vr1' loc1.c` 
    f2=`awk -v vr1=$bar 'NR == vr1' loc2.c` 

    if [[ a random file exists ]] ; then # use var1 var2 var3 ; fi 
    if [[ a random file2 exists ]] ; then # use var1 var2 var3 ; fi 
    if [[ a random file3 exists ]] ; then # use var1 var2 var3 ; fi 

    ((bar++)) 
done 

的文件LOC1和loc2的列表文件路径通过换行分隔。将路径相对于行号传送给变量f1和f2。循环继续进行,直到loc1中的每个文件(由路径指向)都已经完成某些数据处理,并且文件指向loc2。

任何一种建议是欢迎。

我重用在下面的代码中的变量VAR1,VAR2,VAR3 [..]。

+3

UUOC。如果你想'wc -l'只打印行数(而不是文件名),不要使用cat。使用重定向:' 2012-07-17 14:01:59

回答

3

唯一的问题与重复使用的变量是它们是否在要使用脚本中的每个点适当地初始化。如果每个段落在使用之前始终设置该值,则在重用中不会造成任何伤害。主要准则应该是代码的清晰。如果代码清晰,那么没有问题。

从前很久以前,人们可能会认为,可变重用保存记忆;这些天,我不会为索赔而烦恼。

+1

@Geekasaur:其他注释:有意义的变量名称非常重要。它们使代码更易于阅读和维护。虽然“var1”可能只是一个用于问题目的的占位符,但我看到的代码太多了(并且自己写了一些),并且使用了无意义的变量名。另一方面,不要为了避免重复使用名字而自作主张。我看过很多名称相同的代码,因此不可能保持直接的关系。 – 2012-07-17 21:38:56

+0

关于初始化的另一点是范围。在Bash中,使用函数和'local'声明可以帮助允许名称重用,同时减少名称冲突风险。说到名称冲突,使其成为在shell脚本中使用小写或混合大小写变量名的习惯,以避免与shell或环境变量的潜在冲突。 – 2012-07-17 21:39:41

4

完全不相关变量的使用,但您可以简化文件迭代,假设你不需要barmax为别的:

while read -r f1 && read -r -u 3 f2; do 
    if [[ a random file exists ]] ; then # use var1 var2 var3 ; fi 
    if [[ a random file2 exists ]] ; then # use var1 var2 var3 ; fi 
    if [[ a random file3 exists ]] ; then # use var1 var2 var3 ; fi 
done < loc1.c 3< loc2.c