bash 在同一行顯示 print

bash 在同一行顯示 print

我有一個 bash 腳本,它呼叫一個函數來取得套件目錄。
我正在嘗試調試被調用的函數(_ros_package_find)並添加一些 echo 語句。

pkgdir=`_ros_package_find $1`
echo 'debug rosbash first $pkgdir', $pkgdir


function _ros_package_find {
    echo 'debug rospackage find', $1
    local loc
    loc=`export ROS_CACHE_TIMEOUT=-1.0 && rospack find $1 2> /dev/null`
    echo 'loc', $?
    if [[ $? != 0 ]]; then
        return 1
    fi
    echo $loc
    return 0
}

現在,最終顯示如下 -

debug rosbash first $pkgdir, debug rospackage find, roscpp_tutorials loc, 0 /opt/ros/lunar/share/roscpp_tutorials

不確定為什麼「debug rospackage find」會顯示在最終 echo 語句的 echo 語句中,而不是顯示在其自己的行中。

答案1

您的腳本可能會受益於一些修改(請參閱下面的腳本更新版本)。

Q:為什麼「debug rospackage find」顯示在最終 echo 語句的 echo 語句中,而不是在其自己的行中。

答:下面一行的輸出:

echo 'debug rosbash first $pkgdir', $pkgdir

將:

文字“debug rosbash first $pkgdir”後跟指令的結果,其中$pkgdir是指令_ros_package_find

在下面的範例中,您可以看到該tempvar變數保存運行命令的結果ls,運行時echo "debug debug", $tempvar- 您將得到一行結果:

$ ls
123  234  345
$ tempvar=$(ls)
$ echo "debug debug", $tempvar
debug debug, 123 234 345

當運行echo commands下面的兩個範例時 - 您將得到兩行輸出:

$ echo "debug debug"; echo $tempvar
debug debug
123 234 345

腳本的修改版本:

#!/bin/bash
pkgdir=$(_ros_package_find "$1")
echo "debug rosbash first $pkgdir", "$pkgdir"

function _ros_package_find {
    echo 'debug rospackage find', "$1"
    local loc
    loc=$(export ROS_CACHE_TIMEOUT=-1.0 && rospack find "$1" 2> /dev/null)
    echo 'loc', $?
    if [[ $? != 0 ]]; then
        return 1
    fi
    echo "$loc"
    return 0
}

相關內容