【问题标题】:Bash passing arguments to a C code with ${variable}Bash 使用 ${variable} 将参数传递给 C 代码
【发布时间】: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 请将您的解决方案设为答案并将其标记为已接受,这样其他人就不会将此视为未决问题,而未来的读者会看到您的解决方案。

标签: bash variables arguments


【解决方案1】:

发现问题了! $folder/*.* 中的 $i 占用了整个 var "$folder/*.*" 而我认为它只是 "*.*" 因此在传递参数时 $folder/$i 正在重复 $folder部分呵呵。

正确的代码:

#!/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 "$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

【讨论】:

    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 2019-12-20
    • 2021-11-17
    • 2013-11-11
    • 2021-10-05
    • 2021-07-18
    • 1970-01-01
    相关资源
    最近更新 更多