从函数返回变量

从函数返回变量

我有如下所示的 Linux 脚本。我可以让它从解密方法返回没有什么我需要解压一个文件。方法解密发送一个带有 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

Shell函数模仿子进程;与子进程一样,它们的返回值只是一个 8 位数字,通常表示成功(0)或失败(非零)。要将数据传递出函数,请将其存储在变量中。除非声明如此,否则变量对于函数来说不是局部的。

decrypt () {
  valoare="$decrypt1"
}

decrypt
decrypted="$valoare"

请注意,我还没有审阅您的脚本。破碎的缩进和似乎与它们的用途无关的变量名称很难阅读。我确实看到了一些明显的潜在问题:许多命令在变量替换周围缺少双引号。始终在变量和命令替换两边加上双引号:"$val"等。还有其他一些没有意义的位,例如$CONST=$decrypt1— 设置变量CONST、删除$.

答案2

为了回答您的问题的标题,shell 函数通常通过将数据打印到 stdout 来返回数据。调用者捕获返回值与retval="$(func "$arg1" "$arg2" "$@")"或类似。另一种方法是将变量的名称传递给它以在其中存储值(使用printf -v "$destvar")。

如果您的脚本不起作用,可能是由于引用问题。您缺少许多变量扩展的引号。

例如

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

您的版本引用了文字部分,但随后将用户数据保持开放状态以供 shell 解释。的输出中的多个空白字符会$decrypt1折叠为单个空格。echo

相关内容