我必须回显与字符串连接的命令替换的输出。要加上的字符串实际上是路径名的字符串。由于文件名在开头包含特殊字符-,所以需要使用绝对路径和文件名。我已经想出了一个草案,它只适用于第一行输出。如何将其扩展到其他行?
示例场景如下所示。
在/tmp目录中,文件如下:
-foo 1.txt
-bar 1.txt命令和输出为:
$ echo "$PWD/$(ls | grep "^-")"
/tmp/-bar 1.txt
-foo 1.txt当我想让它像
/tmp/-bar 1.txt
/tmp/-foo 1.txt我读过关于这大括号展开特性的文章,但我不确定它是否适用于变量,或者像这里所说的命令替换。我还希望每个文件的单独行和文件名单词不分开,这是在执行支撑展开时建议的。(老实说,我不太了解关于支撑扩展等特性的文献!)
另外,还有其他更方便的方法来做到这一点吗?任何帮助都是非常感谢的。
发布于 2017-04-14 04:24:37
要按照您的要求,从-开始获取文件的完整路径列表,可以使用readlink
$ readlink -f ./-*
/tmp/-bar 1.pdf
/tmp/-foo 1.pdf但是,为了直接执行您在注释中提到的内容(使用以-开头的文件名作为pdfgrep的参数),您可以利用--标记选项结束的共同公约,因此在它之后的所有内容都被识别为文件名:
pdfgrep 'pattern' -- -*另见POSIX实用语法指南 (准则10):
不属于选项参数的第一个
--参数应该被接受为指示选项结束的分隔符。任何以下参数都应被视为操作数,即使它们以-字符开头。
发布于 2017-04-14 11:17:32
根本不要使用ls。您可以使用glob,循环可以是隐式的。
$ printf '%s\n' /tmp/-*
/tmp/-foo 1.txt
/tmp/-bar 1.txt或显式
$ for f in /tmp/-*; do echo "$f"; done
/tmp/-foo 1.txt
/tmp/-bar 1.txt发布于 2017-04-14 04:05:59
使用这个
for f in /tmp/-*
do
echo $f
donehttps://stackoverflow.com/questions/43404904
复制相似问题