【问题标题】:The variable is empty after inner loop `for` [closed]内部循环`for`后变量为空[关闭]
【发布时间】:2014-05-01 19:32:21
【问题描述】:

我知道管道正在子shell中进行,但需要一点帮助.. 得到以下代码:

#!/bin/bash
first=""
second=""
for item1 in $(ls *.o)
do
    first=`nm $item1 | grep -e '\<U\>' | awk '{print2}'`
    for item2 in $(ls *.o)
    do
        second=`nm $item2 | grep -e '\<T\>' | awk '{print3}'`

        if [ "$first" == "$second" ]; then
            echo "$item1 => $item2 ($second)"
        else
            echo "Error!"
        fi
    done 
done 

脚本执行后,我收到了空的 $second(在括号中):

print_recursive.o => print_recursive.o ()
print_recursive.o => recfun.o ()
print_recursive.o => recursive.o ()
print_recursive.o => timeout.o ()

您介意按正确的顺序重写此代码吗?提前致谢。

【问题讨论】:

  • 我建议你正确缩进。请注意,您有两个嵌套的 fors,if/else 在其中。
  • for ... in *.o。无需在此处致电ls

标签: bash variables for-loop


【解决方案1】:

总是努力想出一个最小的例子。这个问题与循环无关。

如果变量有问题,请检查设置它的命令。在这种情况下:

second=`nm $item2 | grep -e '\<T\>' | awk '{print3}'`

awk 命令什么也没做。我猜你的意思是{print $3},虽然这也不能解决问题,因为nm 将返回多个匹配的行。你想比较这两组吗?如果是这样,请先sort 他们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-18
    • 2021-08-18
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    相关资源
    最近更新 更多