Bash: 在变量中使用文件中的行数

Bash: Using Number of Lines in File in Variable

我正在尝试从文件中提取行数,然后在变量中使用它。但是,它一直传递文件名,而不是行数。我通读了 this question,但示例不起作用。

for i in $BASE/$TEMPLATE_DIR-$i$PRUNING_METHOD/*.txt
    do
        NUM_LINES=$(wc -l < $i)
        echo $NUM_LINES
        UPLOAD_CMD="sh sshpass_setup_verification.sh $EXP_ID-$i$PRUNING_METHOD__$NUM_LINES__features";
        echo "$UPLOAD_CMD"
        break 1;
    done

打印:

15 #the correct number of lines
sh sshpass_setup_verification.sh di-60sec-max/TemplateUser1.txt #where TemplateUser1.txt is the name of the file

应该打印:

15
sh sshpass_setup_verification.sh di-60sec-max__15__features

人们在评论中告诉您的内容摘要:

for i in "${BASE}/${TEMPLATE_DIR}-${i}${PRUNING_METHOD}"/*.txt
do
    num_lines=$(wc -l < "$i")
    echo "$num_lines"
    upload_cmd="sh sshpass_setup_verification.sh ${EXP_ID}-${i}${PRUNING_METHOD}__${num_lines}__features"
    echo "$upload_cmd"
    break
done

这里的关键是在您的参数扩展和大括号周围使用双引号来消除歧义,例如 _ 之类的字符可以被解释为变量名的一部分,但不应被解释为变量名的一部分。我已经在几个不需要它们但没有害处的地方添加了它们。

我还把你的变量名改成了小写。有一天,当您决定使用一个名为 PATH 的变量时,这会帮助您突然间所有命令都停止工作。