使用变量数组中的特殊字符并复制到文件夹的Bash脚本

时间:2014-02-21 09:23:32

标签: arrays bash shell variables

我有一个关于我的封闭问题的新问题。 在最后一个中,我请求帮助修复脚本,该脚本按文件内容将文件排序到文件夹。 (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

1 个答案:

答案 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