나는 다음 스크립트와 같은 것을 쓰고 있습니다.함수가 "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 값이 토큰화의 일부로 사라집니다.
바라보다: