溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何處理Shell腳本中帶有空格的變量

發(fā)布時間:2021-07-16 12:45:15 來源:億速云 閱讀:342 作者:小新 欄目:開發(fā)技術(shù)

小編給大家分享一下如何處理Shell腳本中帶有空格的變量,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

在批量處理音頻文件時候使用下面的腳本發(fā)現(xiàn)含有空格的文件名并不能被處理;

#$1: 遍歷的文件夾
rootDir=$1
cd $rootDir
allAudioFile=$(find $1 -name "*\.mp3")
for oneAudioFile in $allAudioFile
do
  mv -f $oneAudioFile  $rootDir
done

通過set -x將執(zhí)行信息打印出來,發(fā)現(xiàn)可以執(zhí)行到,但是執(zhí)行過程提示找不到對應(yīng)的文件名,mv對應(yīng)的source文件并不是原本的文件名,通過對比發(fā)現(xiàn)原來是文件名中含有空格,導(dǎo)致在for循環(huán)的過程中并沒有將完整的文件名取出來;

例如有文件a b.mp3這時候在for循環(huán)的時候會有下面的打?。?/p>

mv: cannot stat “./a” : No such file or directory

從上面的錯誤信息可以發(fā)現(xiàn)原本的文件名由于空格被打斷了,因此需要在for循環(huán)處理的過程中識別到文件名是含有空格的,從而對文件名中的空格不做處理;

bash使用IFS變量進行分割,所以需要修改IFS的分隔方式進而重新隔離,即需要將"\n"換行處理作為處理方式:

IFS=$(echo -en “\n\b”)
IFS=$(echo -en “\n\r”)

上面的兩種方式均可(使用Ubuntu16.04),其它也可以,只需要在處理的時候?qū)?quot;\n"作為其中一個標(biāo)識即可,因為使用find命令或者其他命令會將結(jié)果以行的形式存放到變量中;

#$1: 遍歷的文件夾
rootDir=$1
cd $rootDir
allAudioFile=$(find $1 -name "*\.mp3")
IFS_BACKUP=$IFS
IFS=$(echo -en "\n\b")
#IFS=$(echo -en "\n\r")
for oneAudioFile in $allAudioFile
do
  mv -f "$oneAudioFile"  $rootDir
done
IFS=$IFS_BACKUP

至此,bash腳本中對于含空格文件處理方式介紹完畢,當(dāng)然要記得將原本的IFS內(nèi)容保存下來,腳本跑完了將原本的內(nèi)容放回去。

以上是“如何處理Shell腳本中帶有空格的變量”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI