我有一个关于我的封闭问题的新问题。 在最后一个中,我请求帮助修复脚本,该脚本按文件内容将文件排序到文件夹。 (Bash script which sorts files to folders by it's content; How to solve wildcard in variables?)
现在我遇到了一个新问题。 变量发生了变化。旧的那些数组中的单个单词变量,现在我有多个单词,特殊字符作为变量。
这是我的剧本:
#!/bin/bash
declare -a standorte;
standorte=('Zweigst: 00' 'Zweigst: 03' 'Zweigst: 08')
ls lp.3.* | while read f
do
for ort in "${standorte[@]}"; do
grep -i $ort "$f" >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo Copying $f to $ort
cp "$f" $ort
fi
done
done
现在你看,“ort”是文件夹名称。因此脚本尝试将文件lp.3。*复制到例如Zweigst:00。但没有逃脱反斜杠它不起作用。把我的charakters转换成变量,脚本不起作用,因为在文件lp.3。*中没有“Zweigst:\ 00”。
我想,我必须为“ort”声明一个新变量,我将文件夹名称放入其中。 但我不知道如何更改for循环。我必须说脚本,当你发现Zweigst:00将这个文件复制到文件夹“zweigst00”。对不起,我的bash脚本体验并不好。我无法通过自己改变这一点。
我有多个(零到无限制)lp.3。*文件(例如lp.3.1,lp.3.2,lp.3.5.2等) 在此文件中是以下文字:http://pastebin.com/0ZzCUrpx
答案 0 :(得分:0)
您只需要引用变量:
for ort in "${standorte[@]}"; do
grep -i "$ort" "$f" >/dev/null 2>&1
# ^----^-------- quotes needed
if [ $? -eq 0 ]; then
echo Copying $f to $ort
cp "$f" "$ort"
# ^----^-------- quotes needed
fi
done
为什么呢?因为否则这个
grep -i $ort "$f" >/dev/null 2>&1
会因grep
无法理解的内容而扩展:
grep -i Zweigst: 00 "$f" >/dev/null 2>&1
看到它正在尝试从文件Zgeigst:
grep 00
。