【发布时间】:2016-10-20 23:19:41
【问题描述】:
我的 bash 脚本无法正常工作,因为它没有将 ${var} 转换为其值。
我的代码:
#!/bin/bash
make huffmanTree.exe
file="timesSeq.txt"
echo "Times Huffman Tree Sequential" > ${file}
echo "" >> ${file}
function fn_calculate_times {
for i in ${folder}/*.*
do
echo ${i} times >> ${file}
avg=0
for j in {1..5}
do
start=`date +%s`
echo "${folder}/${i}"
./huffmanTree.exe "$folder/$i"
end=`date +%s`
echo " time = `expr $end - $start` s >> ${file}"
avg=`expr $avg + $end - $start`
done;
echo " average = `expr $avg / $j`"
done;
echo "" >> ${file}
}
echo "TXT's" >> ${file}
folder="test-texts"
fn_calculate_times
echo "IMG's" >> ${file}
folder="test-images"
fn_calculate_times
我的输出(多次):
测试图像/测试图像/img-input-200MB.jpg
错误:无法打开文件。
时间 = 0 秒 >> timesSeq.txt
平均 = 0
好像 $folder/$i 没有翻译成 test-texts/text-name.txt
- 脚本的其余部分似乎有效。
- 我尝试使用 {} 来 ${folder}/${i)。结果相同。
- 我在 Mac 上。
我错过了什么?
//已解决:读取 cmets。
【问题讨论】:
-
也许使用引号来保护变量的内容。其中有连字符,c 代码参数解析器可能会将其误解为选项。所以试试
"${folder}/${i}"?${i}中的文件名到底是什么? -
@Dilettant - 这对 C 可执行文件所做的任何事情都没有任何影响。
-
我复制了你的脚本,创建了一个
ln -s /bin/echo huffmanTree.exe,注释掉了 make 行,创建了这些文件夹,将文件“放入”其中,我看到输出很好的行,例如:test-texts/test-texts/a_text.txt五次时间测量,以及我创建的其他文件夹单个文件上匹配的五个行组。也使用 OS X 和GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin15)你有特殊的 glob 选项设置吗?像set -f一样有效吗? -
好的。发现问题了! $folder/*.* 中的 $i 占用了整个 var "$folder/*.*" 而我认为它只是 "*.*" 因此在传递参数时 $folder/$i 正在重复 $folder部分呵呵。
-
@p4x 请将您的解决方案设为答案并将其标记为已接受,这样其他人就不会将此视为未决问题,而未来的读者会看到您的解决方案。