在做iOS Flutter依賴引入的時候摩瞎,需要去遍歷Pods 工程中的文件膝昆,而這個工程下剛好有一個名稱帶空格的文件夾娃弓。如下:
Pods目錄
如下的腳本會出問題:
#!/bin/bash
function doSomething(){
for element in `ls $1`
do
dir_or_file=$1"/"$element
if [ -d $dir_or_file ];then
doSomething $dir_or_file
else
echo $dir_or_file
#do something
...
fi
done
}
root_dir="./"
doSomething $root_dir
原因是烛恤,執(zhí)行ls
命令的時候,文件夾名稱帶了空格抵皱,被當(dāng)成了分隔符善榛。
image.png
網(wǎng)上查了一下相關(guān)資料辩蛋,都是說把分隔符修改掉,使用時再改回來移盆。于是腳本變成了這樣:
#!/bin/bash
function doSomething(){
for element in `ls $1 | tr " " "\?"`
do
element=`tr "\?" " " <<<$element`
dir_or_file=$1"/"$element
if [ -d $"dir_or_file" ];then
getLocalizeString $dir_or_file
else
echo "$dir_or_file"
#do something
...
fi
done
}
root_dir="./"
doSomething $root_dir
但是這樣還會有問題悼院,我們知道$1
是獲取第一個參數(shù),那么在名稱帶空格的文件夾遞歸入?yún)r咒循,又會因為空格的問題變成兩個參數(shù)据途。那問題就變成:把過個參數(shù)變成一個參數(shù)。答案就是:$*
剑鞍。此外還需要特別注意的是昨凡,每一個引用帶空格的文件或者文件夾名稱時必須帶上引號,才能成為一個整體蚁署。
最終腳本如下:
#!/bin/bash
function doSomething(){
for element in `ls "$*" | tr " " "\?"`
do
element=`tr "\?" " " <<<$element`
dir_or_file="$1"/"$element"
if [ -d "$dir_or_file" ];then
getLocalizeString "$dir_or_file"
else
echo "$dir_or_file"
#do something
...
fi
done
}
root_dir="./"
doSomething $root_dir
導(dǎo)致這個問題的根本原因就是:shell腳本的入?yún)⒎绞脚c帶空格文件/文件夾名產(chǎn)生沖突便脊。
如果解決了你的問題,瑪法點個贊或者留言光戈,讓我知道你來過哪痰。