在简单的bash脚本中转义Whitespace

时间:2011-12-02 12:06:12

标签: bash

在之前的问题中有一些提到逃避空白区域的提及,但我没有,或者可以解决如何适用于我的情况所以我只是想道歉,如果我是双重发布。这也是我认为非常简单,但我真的很喜欢bash,一般的编程实际上......

无论如何,我正在尝试创建以下小脚本:

 #!/bin/bash
    for i in $( zfs list -o name | grep data/ ) ; do
    echo $i
    done

但其中一条输出线包含一个空白区域,因此正在两条独立的线条上打印。我需要弄清楚如何正确处理它,以便我可以继续使用脚本并使用它来缩短我制作的另一个脚本:

    #!/bin/bash
zfs snapshot data/backups@initial
zfs snapshot data/bin@initial
zfs snapshot data/downloads@initial
zfs snapshot data/movies@initial
zfs snapshot data/music@initial
zfs snapshot data/pictures@initial
zfs snapshot data/stand\ up@initial
zfs snapshot data/thumbs@initial
zfs snapshot data/tv@initial
zfs snapshot data/vids@initial
echo "Snapshots Created"
echo ""
echo "Copying Backups"
zfs send data/backups@initial   | pv -tpreb -s 48M  | ssh 192.168.61.100 zfs recv -dF data
echo "Backups Copied"
echo ""
echo "Copying Bin"
zfs send data/bin@initial   | pv -tpreb -s 46K  | ssh 192.168.61.100 zfs recv -dF data
echo "Bin Copied"
echo ""
echo "Copying Downloads"
zfs send data/downloads@initial | pv -tpreb -s 31M  | ssh 192.168.61.100 zfs recv -dF data
echo "Downloads Copied"
echo ""
echo "Copying Movies"
zfs send data/movies@initial    | pv -tpreb -s 490496M  | ssh 192.168.61.100 zfs recv -dF data
echo "Movies Copied"
echo ""
echo "Copying Music"
zfs send data/music@initial | pv -tpreb -s 66560M   | ssh 192.168.61.100 zfs recv -dF data
echo "Music Copied"
echo ""
echo "Copying Pictures"
zfs send data/pictures@initial  | pv -tpreb -s 6114M    | ssh 192.168.61.100 zfs recv -dF data
echo "Pictures Copied"
echo ""
echo "Copying Stand Up"
zfs send data/stand\ up@initial | pv -tpreb -s 13.312M  | ssh 192.168.61.100 zfs recv -dF data
echo "Stand Up Copied"
echo ""
echo "Copying Thumbs"
zfs send data/thumbs@initial    | pv -tpreb -s 45K  | ssh 192.168.61.100 zfs recv -dF data
echo "Copied Thumbs"
echo ""
echo "Copying TV"
zfs send data/tv@initial    | pv -tpreb -s 787456M  | ssh 192.168.61.100 zfs recv -dF data
echo "Copied TV"
echo ""
echo "Copying Vids"
zfs send data/vids@initial  | pv -tpreb -s 11k  | ssh 192.168.61.100 zfs recv -dF data
echo "Vids Copied"

我将把它切成一个更短的脚本,但我首先需要初始位。我希望我能够自己解决剩下的问题

好的我稍微将其更改为while语句,以便我能够处理其他ZFS命令,否则当我尝试处理它时,我无法处理每个输出行对着注释。它作为一个显然无效的长命令出现。

无论如何,我有:

zfs list -o name | grep data/ | while read i;

但我再次留下了空白问题......我怎么能绕过那个?

1 个答案:

答案 0 :(得分:1)

当您需要保留空格时,始终引用扩展

for i in "$( zfs list -o name | grep data/ )" ; do
    echo "$i"