我试图将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.baseline
、is.A.4.baseline
和is.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/