Yol*_*ola 23 bash filenames special-characters
由于文件名中的空格,下一个代码不起作用,如何修复?
IFS = '\n'
for name in `ls `
do
number=`echo "$name" | grep -o "[0-9]\{1,2\}"`
if [[ ! -z "$number" ]]; then
mv "$name" "./$number"
fi
done
Run Code Online (Sandbox Code Playgroud)
ugo*_*ren 17
更换
for name in `ls`
有:
ls | while read name
注意:bash变量范围很糟糕.如果你在循环中更改一个变量,它将不会在循环外生效(在我的版本中它不会,在你的版本中它将会生效).在这个例子中,没关系.
注意2:这适用于带空格的文件名,但对于其他一些奇怪但有效的文件名则失败.请参阅下面的Charles Duffy的评论.
看起来有两个潜在的问题:
首先,IFS 变量及其赋值中不应有空格。代替
IFS = '\n'它应该是IFS=$'\n'
其次,for name in ls将导致文件名具有spaces和的问题newlines。如果你只是想处理filename然后spaces做这样的事情
for name in *
我不明白该行的意义
number=`echo "$name" | grep -o "[0-9]\{1,2\}"`
Run Code Online (Sandbox Code Playgroud)
这将为您提供在 中找到的filename with spaces数字new lines。也许这就是你想要的。