셸 스 크 립 트 함수 설명, 호출

1938 단어 shell
셸 스 크 립 트 에서 함수 의 성명, 호출, 처리 결과 의 반환 등 문제. 
1. 함수 선언
1.1 함 수 는 먼저 성명 한 후에 호출 하고 성명 과 호출 에 순서 적 인 요구 가 있어 야 한다.
1.2 셸 의 함수 반환 값 은 숫자 일 수 있 습 니 다. 0 을 되 돌려 실행 에 성 공 했 음 을 표시 합 니 다. 다른 유형의 값 을 되 돌려 줄 때 오류 가 발생 합 니 다: numeric argument required
1.3 함수 반환 값 이 제 한 된 문제 로 인해 전역 변 수 를 정의 하여 함수 의 처리 결 과 를 가 져 와 야 합 니 다.
1.4 함수 호출 방식: 함수 명 매개 변수 목록
demo:
#全局变量:字符串去除前后空格的结果
trimResult=""

#函数声明:trim字符串
function trim(){
    #字符串为空不处理
    if [ -z "$1" ]; then
        trimResult=""
    else 
        #去除字符串前后的空格
        trimResult=$(echo $1|awk '{sub(/^ */,"");sub(/ *$/,"")}1')
    fi
}

 #函数调用: 获取第一个“-”之后的trim之后的字符串, 字符串可能有空格, 所以用引号包括
 trim "$(echo ${temp#*-})"

#函数处理结果使用
echo "trim之后的内容为:$trimResult"

 
* * * * 문제: 셸 의 기본 빈 칸 은 구분자 이 고 전달 하 는 매개 변수 에 빈 칸 이 있 으 면 여러 매개 변수 로 여 겨 집 니 다.
두 가지 해결 방법 이 있다.
방식 1: 따옴표 로 인 자 를 포함 합 니 다.
#传递带有空格的参数
trim "first paramter"

방식 2: 기본 구분자 초기 화
#!/bin/sh

function test(){
 echo "all params=$@"
 echo "param_a=$1"
 echo "param_b=$2"
}
param1="aa bb"
echo 'invoke: test $param1, '"param1=$param1"
test $param1

param2="11 22"
echo 'invoke: test "$param2", '"param2=$param2"
test "$param2"
#备份默认分隔符
IFS_BAK=$IFS
#指定新的分隔符
IFS="!!"
echo 'change default separator, invoke: test $param1,'" param1=$param1"
test $param1
#恢复系统默认分隔符
IFS=$IFS_BAK

실행 결과: 결 과 를 통 해 알 수 있 듯 이 따옴표 나 기본 구분자 수정 후 빈 칸 이 있 는 매개 변수 구 조 는 파괴 되 지 않 습 니 다.
invoke: test $param1, param1=aa bb
all params=aa bb
param_a=aa
param_b=bb
invoke: test "$param2", param2=11 22
all params=11 22
param_a=11 22
param_b=
change default separator, invoke: test $param1, param1=aa bb
all params=aa bb
param_a=aa bb
param_b=

 

좋은 웹페이지 즐겨찾기