我必须回显与string连接的命令替换的输出。要预先添加的字符串实际上是路径名字符串。由于文件名在其开头包含特殊字符-
,因此需要使用绝对路径和文件名。我提出的草案只能按计划进行第一行输出。如何将其扩展到其他行?
示例场景如下所示。
在/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
我阅读了this大括号扩展功能,但我不确定它是否适用于变量或命令替换,如here所述。我还想为每个文件分别使用单独的行和文件名unsplitted,这是在执行大括号扩展时建议的。 (老实说,我不太了解有关大括号扩展等功能的大量文献!)
此外,还有其他更方便的方法吗?任何帮助表示赞赏。
答案 0 :(得分:1)
要执行您要求的内容,获取以create role myuser with createdb login encrypted password 'mypassword';
create database mydb with owner 'myuser' encoding 'utf8';
pg_hba.conf:
local myuser mydb md5
...
开头的文件的完整路径列表,您可以使用readlink
:
-
但是,要直接执行您在评论中提到的内容(使用以$ readlink -f ./-*
/tmp/-bar 1.pdf
/tmp/-foo 1.pdf
开头的文件名作为-
的参数),您可以利用pdfgrep
--
标记选项的结尾,因此将其后的所有内容识别为文件名:
pdfgrep 'pattern' -- -*
另见common convention(准则10):
应该接受不是option-argument的第一个
--
参数作为指示选项结束的分隔符。以下任何参数都应被视为操作数,即使它们以-
字符开头。
答案 1 :(得分:1)
根本不要使用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
答案 2 :(得分:0)
使用此
for f in /tmp/-*
do
echo $f
done