함수에서 변수 반환하기 [닫기]

함수에서 변수 반환하기 [닫기]

아래와 같이 Linux 스크립트가 있습니다. 암호 해독 방법에서 반환되도록 할 수 있습니다.아무것도 없다파일의 압축을 풀어야 합니다. decrypt 메서드는 zip 파일 이름이 포함된 문자열을 보냅니다. 몇 가지 제안을 해주세요. 파일을 올바르게 표시하는 또 다른 방법을 언급했습니다.

m_mode_verbose=1
const_1="ceva"
val="valoare"



decrypt ()
{

PASSPHRASE="xxxx"

encrypted=$1
local decrypt1=`echo $encrypted | awk '{print substr($0,0,64)}'`

echo "$PASSPHRASE"|gpg --no-tty --batch --passphrase-fd 0 --quiet --yes --decrypt -o ${sspTransferDir}/${decrypt1} ${sspTransferDir}/${encrypted} 2> /dev/null
if [ $? -eq 0 ]
then
notify "pgp decrypt of file.pgp succeeded"
else
notify "pgp decrypt of file.pgp failed"
fi


#   PASSPHRASE=”your passphrase used for PGP”
#   echo "$PASSPHRASE"|gpg --no-tty --batch --passphras
#e-fd 0 --quiet --yes \
#–decrypt -o file.dat file.pgp 2> /dev/null
#if [ $? -eq 0 ]
#then
#        echo "pgp decrypt of file.pgp succeeded"
#else
#        echo "pgp decrypt of file.pgp failed"
#fi
# echo "testtest $decrypt1"
echo "valoare ="$decrypt1


val=$decrypt1
#eval $decrypt1
$CONST=$decrypt1
echo "local"$CONST
}

process_file()
{
f=$1
echo "Processing $f"
for encrypted in `cat $f`; do
        echo "Name of the file: "$i
        echo "Decrypted : " $decrypted
        decrypted=$(decrypt ${encrypted})   #decrypted = decrypt(encrypted)
         # decrypted=decrypt ${encrypted} ${decrypted}  #decrypted = decrypt(encrypted)
        echo "val ============== " $val
      echo "Decrypted after method" $decrypted
    unzip -o  ${TransferDir}/${decrypted} -d  ${ImportRoot}
        echo "Path after unzip" $ImportRoot
        #rm -f ${decrypted}
        echo "After remove" $decrypted
        path=${sspTransferDir}/${encrypted}
        #rm -f ${sspTransferDir}/${encrypted}
        echo "Path to remove" $path
        echo "Const ="$CONST
done

}


#main


get_config;
file="output$lang.txt"
echo "file is $file"
get_file_list $file # fills $file with the list of encrypted files corresponding to language $language
process_file $file  #process - decrypt,

답변1

셸 함수는 하위 프로세스를 모방합니다. 하위 프로세스와 마찬가지로 해당 반환 값은 일반적으로 성공(0) 또는 실패(0이 아님)를 나타내는 8자리 숫자입니다. 함수에서 데이터를 전달하려면 해당 데이터를 변수에 저장하세요. 변수는 그렇게 선언되지 않는 한 함수에 로컬이 아닙니다.

decrypt () {
  valoare="$decrypt1"
}

decrypt
decrypted="$valoare"

아직 귀하의 스크립트를 검토하지 않았습니다. 깨진 들여쓰기와 목적과 전혀 관련이 없어 보이는 변수 이름으로 인해 읽기가 어렵습니다. 몇 가지 명백한 잠재적인 문제가 있습니다. 많은 명령에 변수 대체에 큰따옴표가 누락되어 있습니다.변수 및 명령 대체에는 항상 큰따옴표를 사용하십시오.: "$val"기다리다. $CONST=$decrypt1변수 설정 CONST, 삭제 등 이해되지 않는 다른 부분이 있습니다 $.

답변2

질문 제목에 답하기 위해 쉘 함수는 일반적으로 데이터를 stdout으로 인쇄하여 반환합니다. 호출자 캡처 반환 값 retval="$(func "$arg1" "$arg2" "$@")"은 또는 와 유사합니다. 또 다른 방법은 (를 사용하여) 값을 저장할 변수의 이름을 전달하는 것입니다 printf -v "$destvar".

스크립트가 작동하지 않으면 참조 문제 때문일 수 있습니다. 많은 변수 확장에 대한 따옴표가 누락되었습니다.

예를 들어

echo "valoare ="$decrypt1
# should be:
echo "valoare =$decrypt1"

귀하의 버전에서는 리터럴 부분을 인용하지만 쉘에서 해석할 수 있도록 사용자 데이터를 열어 둡니다. 출력의 여러 공백 문자는 $decrypt1단일 공백으로 축소됩니다.echo

관련 정보