【问题标题】:Using a path containing * stored in a variable [duplicate]使用包含 * 的路径存储在变量中[重复]
【发布时间】:2018-03-29 23:57:57
【问题描述】:

当我通过 USB 连接我的 Android 设备时,我正在尝试编写一个简单的 bash 脚本来访问它,但我对此有点陌生,所以我很难使用简单的命令。

我写的:

#!/bin/bash

MOBILE="/run/user/${UID}/gvfs/mtp*/Internal shared storage"
cd ${MOBILE}/

我得到了什么:

./mobile.sh: line 5: cd: /run/user/1000/gvfs/mtp*/Internal: No such file or directory

如何让它理解路径中的空格?

编辑:我试过这样:

#!/bin/bash

MOBILE="/run/user/${UID}/gvfs/mtp*/Internal\ shared\ storage/"
CONTAINER="/media/ecrypted/"

cd "$MOBILE"

我得到了:

./mobile.sh: line 6: cd: /run/user/1000/gvfs/mtp*/Internal\ shared\ storage/: No such file or directory

但如果我在终端 cd /run/user/1000/gvfs/mtp*/Internal\ shared\ storage/ 上手动运行,它可以工作。

【问题讨论】:

  • 欢迎来到 SO。请确认您的盒子里是否有名为/run/media 的坐骑。我刚刚在我的/tmp 中创建了一个类似的结构,并且命令对我有用。让我知道吗?
  • 我做了一个解决方法,我可以做到(发布我自己的答案),那个通配符救了我,因为 mtp= 之后的这些数字总是改变
  • @RavinderSingh13 感谢您愿意帮助我,我实际上做了一个解决方法(发布了我自己的答案),是的,我有 /run/user/1000/gvfs/mtp:host=%5Busb%3A002%2C017%5D/Internal shared storage

标签: linux bash


【解决方案1】:

我可以通过一种解决方法来做到这一点:

cd /run/user/${UID}/gvfs/mtp*/Internal\ shared\ storage/

MOBILE=$(pwd)

【讨论】:

  • 如果你正在做pwd 并在上面做ls 那么cd 命令在这里有什么用呢?
  • 这个ls 只是一个例子,在设置 MOBILE 变量后我还有其他命令,我编辑了我的答案谢谢你指出来
  • 好的,请尝试将set -x 放在您的 .profile 或文件中,无论您要放置此变量的任何位置,并查看它在中断时显示的内容,然后也让我们知道。跨度>
  • 您只能引用字符串的一部分。 ls "/run/user/${UID}/gvfs/mtp"*"/Internal shared storage/" 引用所有除了 *
  • 还可以考虑使用"$PWD" 而不是$(pwd)——效率更高。
【解决方案2】:

您的错误发生在./Internal shared storage 中的空间。如果你想使用这种方法,你需要在变量名上加上引号,例如

#!/bin/bash

MOBILE="/run/user/${UID}/gvfs/mtp*/Internal shared storage"
cd "${MOBILE}/"

这应该可以解决问题。以下是相关帖子。

BASH Script to cd to directory with spaces in pathname

编辑:

请注意,如果您使用此方法,则不需要在字符串上使用反斜杠转义。引号就足够了,这就是为什么您的上述修复不起作用的原因。

【讨论】:

  • 我相信OP已经提到OP已经尝试过了。
  • 感谢您的回复!我这样做了,但由于通配符*,我仍然得到了错误,但我想出了一个解决方法(发布并回答):-)
猜你喜欢
  • 2011-05-19
  • 1970-01-01
  • 2014-12-12
  • 1970-01-01
  • 2020-04-14
  • 1970-01-01
  • 2019-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多