Bash
從函式返回一個變數
我有如下所示的 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,
為了回答您的問題的標題,shell 函式通常通過將數據列印到標準輸出來返回數據。呼叫者擷取與
retval="$(func "$arg1" "$arg2" "$@")"
或類似的返回值。另一種方法是將變數的名稱傳遞給它以將值儲存在 (withprintf -v "$destvar"
) 中。如果您的腳本不起作用,則可能是由於引用問題。您缺少很多變數擴展的引號。
例如
echo "valoare ="$decrypt1 # should be: echo "valoare =$decrypt1"
您的版本引用了文字部分,但隨後將使用者數據打開以供 shell 解釋。輸出中的多個空白字元
$decrypt1
折疊為單個空格echo
。
Shell 函式模仿子程序;與子程序一樣,它們的返回值只是一個 8 位數字,通常表示成功(0)或失敗(非零)。要將數據傳遞出函式,請將其儲存在變數中。除非聲明為局部變數,否則變數不是函式的局部變數。
decrypt () { … valoare="$decrypt1" } … decrypt decrypted="$valoare"
請注意,我尚未查看您的腳本。使用損壞的縮進和似乎與它們的用途無關的變數名稱很難閱讀。我確實看到了一些明顯的潛在問題:許多命令在變數替換周圍缺少雙引號。始終在變數和命令替換周圍加上雙引號:
"$val"
等。還有其他一些沒有意義的位,例如$CONST=$decrypt1
— 設置變數CONST
,刪除$
.