bash中正確處理文件或路徑名中的空格

筆者在用一個pdftohtml命令把一大堆論文生成網站的腳本書寫過程中,遇到一個問題:
論文名稱的空格在下面的代碼中會被錯誤分割

#!/bin/bash
for file in $(ls $1) # 這裏的$1是第一個輸入參數,遍歷$1下的文件
do
	echo $file
done

目錄是這樣的
在這裏插入圖片描述
運行結果是這樣的,很明顯沒能處理好空格 "\ "
在這裏插入圖片描述
解決方法很簡單,加雙引號即可:

#!/bin/bash
for file in "$(ls $1)" # 這裏的$1是第一個輸入參數,遍歷$1下的文件
do
	echo "$file"
done

做了個遍歷目錄下的所有文件的函數,代碼如下

#/bin/bash
function getdir(){
    for element in "$(ls $1)"
    do
        dir_or_file="$1/$element"
        if [ -d $dir_or_file ]
        then
            getdir $dir_or_file
        else
            echo "$dir_or_file"
        fi
    done
}

getdir $1 # 接受命令行參數
# 如果這個shell文件保存爲 getdir, 並且有運行權限: chmod +x getdir
# 運行例如: ./getdir ~/
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章