我试图将gawk的结果附加到相应的文件中,并将for循环附加到目录基线中的所有文件:

#! /bin/sh

for file in baselines/*; do numThreads=$(echo $file | gawk 'BEGIN { FS = "." } ; {print $3 }') echo "Number of Threads: $numThreads" >> $file; done

但是numThreads变量没有分配给任何东西,所以它在文件中附加了“线程数”。
文件夹基线包含类似于is.A.2.baselineis.A.4.baselineis.A.8.baseline的文件,因此我希望分别附加“线程数:2”、“线程数:4”和“线程数:8”。。。

最佳答案

您的问题是缺少换行符(或者,在极端情况下,是分号)。你的剧本是:

for file in baselines/*; do numThreads=$(echo $file | gawk 'BEGIN { FS = "." } ; {print $3 }') echo "Number of Threads: $numThreads" >> $file; done

echo "Number of Threads..."部分之前需要换行符或分号。为了可读性:
for file in baselines/*
do
    numThreads=$(echo $file | gawk 'BEGIN { FS = "." } ; {print $3 }')
    echo "Number of Threads: $numThreads" >> $file
done

如果你坚持写不可读的代码:
for file in baselines/*; do numThreads=$(echo $file | gawk 'BEGIN { FS = "." } ; {print $3 }'); echo "Number of Threads: $numThreads" >> $file; done

但是,请不要再次将这样的代码发送到堆栈溢出以供审阅/修订,因为它很难阅读,而且人们也不会在很难阅读代码的地方费心回答问题。
顺便说一下,你的代码做的是相当微妙的错误。它运行echo命令,将环境变量numThreads设置为正确的值,但参数列表的扩展在此之前发生,因此当对numThreads字符串求值时,"Number of Threads: $numThreads"为空。证明这一点的一种方法是:
for file in baselines/*
do
    numThreads=$(echo $file | gawk 'BEGIN { FS = "." } ; {print $3 }') env | grep numThreads
done

它将打印环境变量的值。另一种证明方法是:
for file in baselines/*
do
    numThreads=$(echo $file | gawk 'BEGIN { FS = "." } ; {print $3 }') sh -c 'echo numThreads=$numThreads'
done

关于linux - 将输出存储到可变bash中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19755581/

10-11 22:47