在我的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中运行。但是,我更喜欢坚持使用grep
或sed
。有人有什么建议吗?
阅读建议后我试过
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脚本时,它会自动将它们放在双引号中。
答案 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