首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在字符串拆分中苦苦挣扎

在字符串拆分中苦苦挣扎
EN

Stack Overflow用户
提问于 2020-12-04 20:23:14
回答 1查看 65关注 0票数 0

在多年的Windows脚本编写之后学习shell脚本。我有一个运行在TrueNAS 12.2监狱的qBittorrent-nox。qBittorrent提供了在torrent下载完成后运行命令的功能。我想调用一个shell脚本,在作为参数传递的文件夹上运行两个chown命令。文件夹将包含空格,并且可能包含&号,因此shell脚本将失败。根据qBittorrent的日志文件传入的命令如下:

代码语言:javascript
复制
bash /mnt/torrents/Live/fixperms.sh "Name of the folder & description of contents"

这是我期望工作的代码:

代码语言:javascript
复制
#!/usr/local/bin/bash
chown -R 1001:1006 $(printf "%q" "$1")

命令的格式正确,但脚本在拆分字符串时失败。如果我回显并手动执行它,它创建的命令就可以工作。我找不到一种方法使任何shell (csh、sh、zsh和bash)不在空格处拆分字符串。我试过用单引号,双引号和反引号。

我已经在这上面花了几个小时,但我没有取得任何进展。我已经尝试了所有四个shell,zsh拆分了双引号字符串,而文档说它不应该拆分,参数扩展在bash中有效,但仍然拆分字符串。我没有python或perl,如果可以避免的话,我不希望安装它们。

我遗漏了什么?

Bash为5.0.18,zsh为5.8,tcsh为6.2.00

EN

回答 1

Stack Overflow用户

发布于 2020-12-11 23:13:33

您可以执行以下操作

代码语言:javascript
复制
VAR="Name of the folder & description of contents"; bash /mnt/torrents/Live/fixperms.sh "$VAR"

然后使用其中的空格来处理该字符串。如果你举个例子,在狂欢中这样做,它是有效的:

代码语言:javascript
复制
    user@server:~$ VAR="test is test"
    user@server:~$ ./test2.sh "$VAR"
    test is test

so只包含一个echo $1,因此您可以在以后使用整个字符串,如下所示

代码语言:javascript
复制
#!/usr/local/bin/bash
chown -R 1001:1006 $(printf "%q" "$1")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65143501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档