首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当有命令替换时扩展

当有命令替换时扩展
EN

Stack Overflow用户
提问于 2017-04-14 03:45:43
回答 3查看 38关注 0票数 0

我必须回显与字符串连接的命令替换的输出。要加上的字符串实际上是路径名的字符串。由于文件名在开头包含特殊字符-,所以需要使用绝对路径和文件名。我已经想出了一个草案,它只适用于第一行输出。如何将其扩展到其他行?

示例场景如下所示。

/tmp目录中,文件如下:

代码语言:javascript
复制
-foo 1.txt
-bar 1.txt

命令和输出为:

代码语言:javascript
复制
$ echo "$PWD/$(ls | grep "^-")"
/tmp/-bar 1.txt
-foo 1.txt

当我想让它像

代码语言:javascript
复制
/tmp/-bar 1.txt
/tmp/-foo 1.txt

我读过关于大括号展开特性的文章,但我不确定它是否适用于变量,或者像这里所说的命令替换。我还希望每个文件的单独行和文件名单词不分开,这是在执行支撑展开时建议的。(老实说,我不太了解关于支撑扩展等特性的文献!)

另外,还有其他更方便的方法来做到这一点吗?任何帮助都是非常感谢的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-04-14 04:24:37

要按照您的要求,从-开始获取文件的完整路径列表,可以使用readlink

代码语言:javascript
复制
$ readlink -f ./-*
/tmp/-bar 1.pdf
/tmp/-foo 1.pdf

但是,为了直接执行您在注释中提到的内容(使用以-开头的文件名作为pdfgrep的参数),您可以利用--标记选项结束的共同公约,因此在它之后的所有内容都被识别为文件名:

代码语言:javascript
复制
pdfgrep 'pattern' -- -*

另见POSIX实用语法指南 (准则10):

不属于选项参数的第一个--参数应该被接受为指示选项结束的分隔符。任何以下参数都应被视为操作数,即使它们以-字符开头。

票数 1
EN

Stack Overflow用户

发布于 2017-04-14 11:17:32

根本不要使用ls。您可以使用glob,循环可以是隐式的。

代码语言:javascript
复制
$ printf '%s\n' /tmp/-*
/tmp/-foo 1.txt
/tmp/-bar 1.txt

或显式

代码语言:javascript
复制
$ for f in /tmp/-*; do echo "$f"; done
/tmp/-foo 1.txt
/tmp/-bar 1.txt
票数 1
EN

Stack Overflow用户

发布于 2017-04-14 04:05:59

使用这个

代码语言:javascript
复制
for f in /tmp/-*
do
   echo $f
done
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43404904

复制
相关文章

相似问题

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