无法使用变量扩展名在bash循环中分配正确的文件名

时间:2018-04-06 16:18:07

标签: linux bash loops

我坚持这个问题。 我正在使用循环将每个文件上的命令迭代到特定目录中。使用文件的原始名称生成新文件时,使用变量扩展,只有在变量之前没有文本时才有效。我有这个代码:

Note: Express Checkout Digital Goods is no longer available for new integrations. 
This feature remains available for merchant accounts that already have Express Checkout Digital Goods enabled.

我做错了什么?

1 个答案:

答案 0 :(得分:4)

f包含temp/temp_orfs前缀,而不仅仅是目录中文件的名称。我们假设f扩展为temp/temp_orfs/foo;然后

  • ${f}_temp扩展为temp/temp_orfs/foo_temp
  • temp/temp_orfs/num_${f}_text扩展为temp/temp_orfs/num_temp/temp_orfs/foo_text

您需要基本名称:

for f in temp/temp_orfs/*; do
    bf=${f##*/}
    wc -l "$bf" | gawk '{print $1}' > "temp/temp_orfs/num_${bf}_text"
done

或者,您只需先更改目录:

cd temp/temp_orfs
for f in *; do
    wc -l "$f" | gawk '{print $1}' > "temp/temp_orfs/num_${f}_text"

(无论哪种方式,临时文件都不是必需的,但是如果你真的需要它,请务必注意它的名称,以便你知道它的创建地点。)

awk可能没有必要。您可以使用输入重定向使wc输出只是一个行数,但结果的格式可能略有不同,具体取决于您使用的wc的实现:

# GNU wc
$ wc -l < some_some_file
21

# BSD wc
$ wc -l < some_small_file
      21