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

时间:2015-03-26 17:43:50

标签: bash wc

我试图从文件中提取行数,然后在变量中使用它。但是,它不断传递文件名,而不是行数。我通读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

1 个答案:

答案 0 :(得分:1)

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

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的变量时,这将有助于您突然停止所有命令。