Bash 함수를 통해 void 매개변수를 전달하려면 어떻게 해야 합니까?

Bash 함수를 통해 void 매개변수를 전달하려면 어떻게 해야 합니까?

나는 다음 스크립트와 같은 것을 쓰고 있습니다.함수가 "void" 매개변수를 제공하여 deleteCEfromCeLst스크립트를 호출해야 하기 때문에 예상대로 작동하지 않습니다.spawnPrg, 그러나 프롬프트에서 직접 스크립트를 호출할 때 사용하는 함수 매개변수에 "void" 매개변수를 지정하면 spawnPrg이 "void" 매개변수는 지정되지 않은 매개변수가 아닌 (올바르게) 비어 있는 것으로 나타납니다.''$HOME/execsh/delete.sh

이 함수는 spawnPrg"메인" 프로세스에서 호출된 다른 함수에 의해 사용되거나 메인 프로세스에 의해 직접 사용되기 때문에 필수입니다. 또한 함수에는 spawnPrg로그 파일과 같은 항목을 등록하기 위한 동작이 포함되어야 합니다.

#!/bin/bash

spawnPrg()
{
    echo $@
    $@ &

    return
}

deleteCEfromCeLst()
{
    local d

    cat ce.lst | while read d; do           
        spawnPrg $HOME/execsh/delete.sh $1 '' $d
    done

    return
}

deleteCEfromCeLst
exit

또한 다음과 같이 인코딩을 시도했습니다 deleteCEfromCeLst.

deleteCEfromCeLst()
{
    local d

    cat ce.lst | while read d; do           
        spawnPrg "$HOME/execsh/delete.sh $1 '' $d"
    done

    return
}

위의 코드를 사용하면 아래와 같이 프롬프트로 전송될 때 generatePrg 함수가 실행됩니다.

$HOME/execsh/delete.sh $1 \'\' $d

"void" 매개변수는 문자열로 지정됩니다 . 즉, 스크립트 ''로 전송된 delete.sh두 번째 매개변수 는 "void" 매개변수가 아닙니다.

답변1

참조 변수 확장.

스크립트가 있는 경우 foo.sh:

$ cat foo.sh 
#!/bin/sh
args() {
        printf ">%s<\n" "$@"
}
args "$1" "" foo

이를 호출하는 데 사용하는 sh foo.sh ""출력은 다음과 같습니다.

><
><
>foo<

즉, (의 매개변수)의 빈 매개변수 하나 , "$1"스크립트 foo.sh하드코딩 의 또 다른 매개변수, 고정 문자열입니다.""foo

$@또는 중 하나를 따옴표로 묶지 않으면 $1관련 null 값이 토큰화의 일부로 사라집니다.

바라보다:

관련 정보