Bash 함수에서 배열 반환

1209 단어 devopslinuxbash
언뜻 보기에 Bash 함수에서 수조를 되돌리는 것은 불가능한 것 같다.엄밀히 말하면 이것은 사실이 아니다.C/C++ 프로그래머가 이 일을 할 수 있는 방식을 보면, 인용을 통해 결과 그룹을 함수에 전달할 수 있습니다.이런 방법은 함수 자체가 어떠한 전역 변수 인용의 영향을 받지 않도록 허용한다.다음은 간단한 예입니다.
#!/bin/bash

# Example of how to return an array from a function
# using pass-by-reference.

# Halt on error, no globbing, no undeclared vars
set -efu

function getFnames
####################################################
# Load all filenames into an array. 
# Arguments:
#    $1 = name of return array (must be global)
#    $2 = first path for 'find' command to search
#    ...  other paths for 'find' to search
#
{
   # store the name of the global array for return.
   local h_rtnArr=$1
   # discard first argument in argv
   shift

   # mapfile does heavy lifting.  See: help mapfile
   mapfile $h_rtnArr < <(find $@ -type f)

   # TODO: return error code
}

# Global array
declare -a FnameArr

# Pass FnameArr by reference
getFnames FnameArr /boot

# List results to stdout
arrSz=${#FnameArr[@]}
for (( ndx=0; ndx < $arrSz; ++ndx )); do
   echo -n "${ndx}: ${FnameArr[$ndx]}"
done

이 스크립트를 실행하면/boot 구역에 있는 모든 파일의 열거 목록을 생성합니다.
즐겨라!

좋은 웹페이지 즐겨찾기