如何将命令的输出传递给bash中的函数

时间:2015-04-23 09:34:06

标签: bash function

我在尝试创建函数时遇到问题,我有一个代码来检测连接到usb的蓝牙加密狗,这是代码的第一部分,如果usb是usb,它可以正常工作确实已插入,然后检查其统计数据(向上或向下)并将其存储在 bt_stat 变量中,这毕竟是打印机,到目前为止一切正常

#!/bin/bash
clear    
echo "Looking for bluetooth USB"
bt_id=`lsusb|grep ASUS|cut -c24-32`
bt_stat="0"
    if [[ -z "$bt_id" ]]; then
        echo "not found"
        exit 1 
    else
        bt_stat=`hciconfig|head -3|tail -1|grep "UP\|DOWN"`
        echo "USB BT found"
    fi
echo $bt_stat

输出:

USB BT发现

UP RUNNING

当我尝试将该变量传递给函数

时,问题就开始了
function disp
{
    eval st1="$1"
    echo "Status: ${st1}"
}

它自身也起作用的功能,我传递了一个固定变量和输出,正如预期的那样是"状态:TEST"

var="TEST"
disp "\${var}"

但是当我将函数放在代码的开头时,即使我不使用它,那么甚至不会将命令分配给变量 bt_stat ,是什么导致这个?在将命令输出分配给变量的程序中创建函数时,我是否需要考虑一些事项?

下面是代码看起来与函数的关系,我很抱歉这个问题很长,但我希望它很清楚

#!/bin/bash
function disp
{
    eval st1="$1"
    echo "Status: ${st1}"
}
clear    
echo "Looking for bluetooth USB"
bt_id=`lsusb|grep ASUS|cut -c24-32`
bt_stat="0"
    if [[ -z "$bt_id" ]]; then
        echo "not found"
        exit 1 
    else
        bt_stat=`hciconfig|head -3|tail -1|grep "UP\|DOWN"`
        echo "USB BT found"
    fi
echo $bt_stat

输出:

USB BT发现

另一行显示我是否使用 disp" \ $ {bt_stat}" 来调用此功能,但分配仍然没有进行

状态:

1 个答案:

答案 0 :(得分:0)

我想你可以更轻松地做到:

#!/bin/bash
function disp
{
    local st1="$1"
    echo "Status: ${st1}"
}

clear

echo "Looking for bluetooth USB"
bt_id=`lsusb|grep ASUS|cut -c24-32`
bt_stat=""
if [[ -z "$bt_id" ]]; then
    echo "not found"
    exit 1
else
    bt_stat=`hciconfig|head -3|tail -1|grep "UP\|DOWN"`
    echo "USB BT found"
fi

disp "$bt_stat"