0

我需要传递一系列作为 c++ 软件参数的值。所以我写了这个脚本:

while read randomNumbers; do
                lambda = $randomNumbers | cut -f1 -d ' '
                mi = $randomNumbers | cut -f2 -d ' '
                ./queueSim mm1-queue $lambda $mi 
done < "randomNumbers"          

其中第一个参数是文件“randomNumbers”中每一行的第一个值,第二个值是第二个值(当然)。我遇到了段错误和“找不到命令”。

如何分配从行中获得的 lambda 和 mi 值并将此变量传递给 c++ 软件?

4

2 回答 2

4

没必要剪。让 read 为你分行:

while read lambda mi; do
    ./queueSim mm1-queue $lambda $mi 
done < randomNumbers

请注意,它也通常与 IFS 结合使用,以将输入行拆分到不同的字段上。例如,要解析/etc/passwd(用冒号分隔的文件),您会经常看到:

while IFS=: read username passwd uid gid info home shell; do ...
于 2013-01-30T17:10:44.223 回答
1

我建议分配这样的值:

lambda=$(echo $randomNumbers | cut -f1 -d ' ')
mi=$(echo $randomNumbers | cut -f2 -d ' ')

按照您的操作方式,您实际上尝试运行一个命令,该命令的名称与$randomNumbers.

编辑: 另一件事:由于您的列由空格字符分隔,您也可以将整行读入一个数组,其元素也由空格分隔。实现这一目标的一种方法是:

columns=( $(echo "$randomNumbers" | grep -o "[^ ]*") )
./queueSim mm1-queue ${columns[@]::2}

第一行分别匹配所有不包含任何空格的子字符串,并将它们放入数组columns中。第二行与您的实现中的对应行执行相同的操作:将前两列作为参数插入。由于是通过切片完成的:您获取整个数组${columns[@]},但通过应用::2右侧的边界来选择它的某个子序列,该边界返回columns从左侧开始的每个元素(位置0),而不是在位置上>=2

于 2013-01-30T17:08:50.983 回答