ZFS 命令行中的空格

ZFS 命令行中的空格

我发现空格在 ZFS 命令中似乎很重要,但仅在某些情况下才如此。例如,以下两个命令均有效:

root@grandidier:~# zfs list -t snap -r tank/srv 
NAME                  USED  AVAIL  REFER  MOUNTPOINT
tank/srv@initial     4.22G      -  2.45T  -
tank/srv@2018-01-09   106G      -  3.40T  -
tank/srv@2018-01-14  50.0M      -  3.27T  -
tank/srv@2018-01-17  48.8M      -  3.16T  -
tank/srv@2018-01-19  56.9M      -  3.09T  -
tank/srv@2018-01-30  48.6M      -  2.72T  -
tank/srv@2018-02-12   104M      -  2.49T  -
root@grandidier:~# zfs list -t snap  -r tank/srv 
NAME                  USED  AVAIL  REFER  MOUNTPOINT
tank/srv@initial     4.22G      -  2.45T  -
tank/srv@2018-01-09   106G      -  3.40T  -
tank/srv@2018-01-14  50.0M      -  3.27T  -
tank/srv@2018-01-17  48.8M      -  3.16T  -
tank/srv@2018-01-19  56.9M      -  3.09T  -
tank/srv@2018-01-30  48.6M      -  2.72T  -
tank/srv@2018-02-12   104M      -  2.49T  -
root@grandidier:~#

(注意:在“...snap -r”之间添加了空格)但是,如果我将命令放在管道中并使用反引号替换来获取命令的结果,我会得到:

root@grandidier:~# export NEW=`zfs list -t snap -r tank/srv | tail -1 | awk '{print $1}'`; echo $NEW
tank/srv@2018-02-12
root@grandidier:~# export NEW=`zfs list -t snap  -r tank/srv | tail -1 | awk '{print $1}'`; echo $NEW
cannot open ' -r': invalid dataset name
cannot open 'tank/srv': operation not applicable to datasets of this type

root@grandidier:~# 

我觉得这很令人困惑和不安。我认为我可以通过编写没有任何额外空白的脚本来避开这个问题,但我真的很想知道为什么会发生这种情况。

这是
Ubuntu 16.04 LTS(最新)
bash 4.3.48
ZFS 0.6.5.11-1ubuntu3

编辑:回答前三条评论(并保留代码格式)

root@grandidier:~/bin# printf '%q\n' "$IFS"
$' \t\n'

看来 $(...) 语法也存在这个问题(见下一条评论)。

我不确定看起来像空格的东西可能来自哪里,但似乎这就是问题所在。我已将此字符串复制到/从 Google 文档复制,也许它对空格进行了某种翻译。如果我在 Google 文档中添加额外的空格并复制/粘贴到 xterm,则会报告错误。如果我编辑命令(在命令行上)并删除/重新输入两个空格,则命令可以正常工作而不会出错。

显然,Google Docs 不是一个好的编程编辑器。(我实际上并不是这样使用它,而是在处理某些事情时做笔记并保存命令副本。我可能应该坚持使用 vim 之类的东西。)

相关内容