我试图从文件中提取行数,然后在变量中使用它。但是,它不断传递文件名,而不是行数。我通读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
答案 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
的变量时,这将有助于您突然停止所有命令。