簡體   English   中英

bash腳本中的變量損壞

[英]Variable Corruption in bash script

給定以下代碼,我期望變量$ NewFile為/var/ftp/pub/faxes/myfile.txt.pdf
但是我的系統返回:“ .pdf / ftp / pub / faxes / myfile.txt”

$ Ext返回:“ txt”
$ oFileName返回:“ /var/ftp/pub/faxes/myfile.txt”

我沒有運氣就嘗試了一百種不同的方法。

PDF=".pdf"

#extract the file.ext from the script
FileName1=`head $f -n1 | awk -F/ '{print $NF}' | sed 's/\"//'`
FileName2=`head $f -n1 | awk -F/ '{print $NF}' | sed 's/\"//'`
FileName3=`head $f -n1 | awk -F/ '{print $NF}' | sed 's/\"//'`

FileName=`basename $FileName1`
Ext=`echo $FileName | awk -F . '{print $NF}'`

FileName=`basename $FileName2`
oFileName=/var/ftp/pub/faxes/${FileName}

FileName=`basename $FileName3`
NewFile=/var/ftp/pub/faxes/${FileName}${PDF}

echo $oFileName
echo $NewFile
echo $Ext

任何幫助表示贊賞。

注釋:如果您轉而使用常規的類Unix系統而不是Linux,那么' head $f -n1 '是無法避免的。 您必須將選項(控制)參數放在文件名之前,因此請使用' head -n1 $f '。 (如果設置環境變量POSIXLY_CORRECT,Linux的行為將與其他系統相同。)

評論:您完全可以寫:

FileName1=`head -n1 $f | awk -F/ '{print $NF}' | sed 's/\"//'`
FileName2=$Filename1
FileName3=$Filename1

這比在相同數據上運行相同的三個程序三次要有意義。

評論:您應該學習並使用'$(...)'表示法:

FileName1=$(head -n1 $f | awk -F/ '{print $NF}' | sed 's/\"//')

在MacOS X上運行時,如果f = xxxx.input和文件xxxx.input包含一行表示“ /some/where/myfile.txt”的腳本,則腳本將生成:

/var/ftp/pub/faxes/myfile.txt
/var/ftp/pub/faxes/myfile.txt.pdf
txt

跟蹤輸出(“ bash -x”)為:

+ f=xxxx.input
+ PDF=.pdf
++ head -n 1 xxxx.input
++ sed 's/\"//'
++ awk -F/ '{print $NF}'
+ FileName1=myfile.txt
++ head -n 1 xxxx.input
++ awk -F/ '{print $NF}'
++ sed 's/\"//'
+ FileName2=myfile.txt
++ awk -F/ '{print $NF}'
++ head -n 1 xxxx.input
++ sed 's/\"//'
+ FileName3=myfile.txt
++ basename myfile.txt
+ FileName=myfile.txt
++ echo myfile.txt
++ awk -F . '{print $NF}'
+ Ext=txt
++ basename myfile.txt
+ FileName=myfile.txt
+ oFileName=/var/ftp/pub/faxes/myfile.txt
++ basename myfile.txt
+ FileName=myfile.txt
+ NewFile=/var/ftp/pub/faxes/myfile.txt.pdf
+ echo /var/ftp/pub/faxes/myfile.txt
/var/ftp/pub/faxes/myfile.txt
+ echo /var/ftp/pub/faxes/myfile.txt.pdf
/var/ftp/pub/faxes/myfile.txt.pdf
+ echo txt
txt

您將需要顯示您真正在使用什么,'bash -x'可能很好地幫助您了解問題所在-我無法重現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM