bash는 같은 줄에 인쇄를 표시합니다

bash는 같은 줄에 인쇄를 표시합니다

패키지 디렉터리를 가져오는 함수를 호출하는 bash 스크립트가 있습니다.
호출된 함수(_ros_package_find)를 디버깅하려고 시도 중이며 일부 에코 문을 추가했습니다.

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 문 내에 표시되는 이유는 무엇입니까?

A: 다음 줄의 출력:

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
}

관련 정보