2017-05-19 52 views
0

嘗試解碼"ZW5jb2RlIG1lCg=="使用此腳本如./decodetest.sh '"ZW5jb2RlIG1lCg=="'不會返回任何內容。我使用單引號傳遞base64字符串以保留該命令的雙引號。任何幫助表示讚賞或任何替代品。使用Perl單線程Ksh腳本解碼base64

#!/bin/ksh 
OBJECT=$1 
perl -MMIME::Base64 -e 'print decode_base64(${OBJECT})' 
#echo ${OBJECT} 

在命令行下面正確地輸出「編碼我」。

perl -MMIME::Base64 -e 'print decode_base64("ZW5jb2RlIG1lCg==")' 
+0

嘗試在KSH文件雙引號? 'perl -MMIME :: Base64 -e「打印decode_base64($ {OBJECT})」' – toolic

+0

@toolic這樣做了!除了更改這些引號外,我嘗試了其他一切。你介意解釋單雙之間的區別嗎? – ocbit

+0

這只是一個受過教育的猜測。我不是所有炮彈變種的微妙之處的專家。 – toolic

回答

3

,而不是試圖讓嵌套報價工作,這將是清潔通過傳遞參數作爲參數:

#!/bin/ksh 
OBJECT=$1 
perl -MMIME::Base64 -e 'print decode_base64($ARGV[0])' "$OBJECT" 
+0

更好。我根本不用擔心引用輸入。謝謝! – ocbit

+0

或者直接傳遞'$ 1'而不是分配給'OBJECT'然後傳遞副本。儘管如果這是一個長代碼,分配給另一個變量以使其自行記錄是合理的。 – alvits

2

Shell環境變量都可以訪問在Perl通過%ENV hash

perl -MMIME::Base64 -e 'print decode_base64($ENV{OBJECT})' 

您可能需要對ksh中的變量調用export以使其對於子殼體可見。

OBJECT=$1 
export OBJECT 
perl -MMIME::Base64 -e 'print decode_base64($ENV{OBJECT})' 

export OBJECT=$1 
perl -MMIME::Base64 -e 'print decode_base64($ENV{OBJECT})'