【问题标题】:Bash script argument with spaces带有空格的 Bash 脚本参数
【发布时间】:2014-06-05 22:40:46
【问题描述】:

我正在尝试使用 Torrent-Video-Player 脚本,但它不适用于包含空格的文件。这是一个 Nautilus 脚本。

#!/bin/bash
xterm -e "peerflix "$1" --vlc"

“test.torrent” -> 好的
“test test.torrent”-> 无法执行 peerflix 测试:找不到这样的文件或目录

【问题讨论】:

  • 为什么有嵌套引号?

标签: bash command-line-arguments space


【解决方案1】:

换行

xterm -e "peerflix "$1" --vlc"

xterm -e "peerflix '$1' --vlc"

xterm -e "peerflix \"$1\" --vlc"

第一种形式等价于:

xterm -e "peerflix " $1 " --vlc"

这不是你所期望的。

【讨论】:

  • 很遗憾,这是不正确的。 -e 接受多个参数(因此它也将它们作为参数传递)。如果您在里面有其他特殊字符(如引号),您的解决方案可能会中断您想要的是 xterm -e 'peerflix' "$1" '--vlc' 或者您可以省略单引号 xterm -e peerflix "$1" --vlc。但是,它并不能解决带有前导斜杠的文件的问题。这应该会更好(如果 peerflix 支持它,但我不知道)。 xterm -e peerflix --vlc -- "$1"
  • @Aleks-DanielJakimenko,你没有花时间去理解这些问题和答案。在这种情况下,必须将文字 $1 传递给 peerflix。它不会被扩展。
  • @RSahu 请再看一遍。它应该被扩展,因为您建议将其更改为"peerflix '$1' --vlc"(这显然会扩展它)。所以,在你的回答中它会扩展,所以我保留了它。再次查看这个问题证实了我的假设,即它应该扩展(因为他说它在没有空格的情况下工作,并且在包含空格的参数中不起作用)。
猜你喜欢
  • 1970-01-01
  • 2015-10-21
  • 2013-06-10
  • 2018-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多