如何删除从grep capture创建的bash数组中每个元素周围的引号

时间:2017-08-20 02:25:40

标签: bash shell scripting grep

在我的bash函数中,我使用grep从字符串中捕获匹配的模式(选择创建的文件),然后存储在数组中捕获的内容。该字符串被分配给名为output

的变量
installing route
  create app/routes/foo.js
  create app/templates/foo.hbs
updating router
  add route foo
installing route-test
  create tests/unit/routes/foo-test.js

运行后

 files=($(echo "$output" | ggrep -oP 'create\s\K(.+)')) 

我通过运行echo ${files[*]}确认我正在捕捉我想要的内容。终端中的输出看起来如此

app/routes/foo.js app/templates/foo.hbs tests/unit/routes/foo-test.js

我的目标是将这些文件作为参数传递给npm脚本(npm run lint <list of files>)。但是,当我尝试将我的变量插入到npm脚本执行时,文件名就像

一样打印出来
"app/routes/foo.js" "app/templates/foo.hbs" "tests/unit/routes/foo-test.js"

"app/routes/foo.js app/templates/foo.hbs tests/unit/routes/foo-test.js"

这里的最终目标是能够运行

npm run lint app/routes/foo.js app/templates/foo.hbs tests/unit/routes/foo-test.js

我已经尝试了大量的组合来插入我的file变量,但似乎没有任何效果。我觉得我在概念上遗漏了一些东西,或者以错误的方式接近这个。我最初是在没有使用file的数组的情况下尝试这个,但我遇到了同样的问题。我的第一步是让它在bash中运行。但是,我更喜欢坚持使用grepsed。有人有什么建议吗?

阅读建议后我试过

parsedfiles=$(echo "${files[*]}" | sed  -e 's/"//g')
echo $parsedfiles
npm run lint $parsedfiles

echo $parsedfiles运行时,我的终端输出看起来很好app/routes/foo.js app/templates/foo.hbs tests/unit/routes/foo-test.js,但在下一行,它仍然输出为npm run "app/routes/foo.js" "app/templates/foo.hbs" "tests/unit/routes/foo-test.js"

解决 这里真正的问题不在于我如何传递args。这是实际运行npm script的一个问题。将args传递给npm脚本时,它会自动将它们放在双引号中。

1 个答案:

答案 0 :(得分:1)

使用sed编辑文本如下。

$ var=`echo "app/routes/foo.js app/templates/foo.hbs tests/unit/routes/foo-test.js" | sed  -e 's/"//g'`

test$ echo $var
app/routes/foo.js app/templates/foo.hbs tests/unit/routes/foo-test.js

现在你可以在npm run lint中使用var

$ npm run lint $var