首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在shell脚本中,我如何正确地转义双引号,以便可以使用带引号的参数运行命令?

在shell脚本中,我如何正确地转义双引号,以便可以使用带引号的参数运行命令?
EN

Stack Overflow用户
提问于 2018-12-20 11:58:04
回答 1查看 139关注 0票数 0

我想在我的shell脚本中运行如下代码:

代码语言:javascript
复制
./node_modules/.bin/npm-run-all -p "ng lint myapp"

我有一个for循环来生成引用的字符串:

代码语言:javascript
复制
LINT=""
for app in $APPS
do
    LINT="$LINT \"ng lint ${app}\""
done

我认为使用\“将能够生成我想要的字符串。但是当我运行:

代码语言:javascript
复制
./node_modules/.bin/npm-run-all -p ${LINT}

我得到了:

代码语言:javascript
复制
ERROR: Task not found: ""ng", myapp""

看起来这是在运行:

代码语言:javascript
复制
./node_modules/.bin/npm-run-all -p \"ng lint myapp\"

什么是正确的方法来转义双引号,以便我将运行以下代码:

代码语言:javascript
复制
./node_modules/.bin/npm-run-all -p "ng lint myapp"
EN

回答 1

Stack Overflow用户

发布于 2018-12-22 06:47:18

更新:感谢你指出另一个重复的问题和@CharlesDuffy的评论。我的问题可以这样解决:

代码语言:javascript
复制
#!/bin/bash

APPS="app1 app2"
LIBS="lib1 lib2"
PROJECTS="${APPS} ${LIBS}"

projects=()
for project in $PROJECTS
do
  projects+=("ng lint ${project}")
done

./node_modules/.bin/npm-run-all -p "${projects[@]}"

等待的另一种方式:

代码语言:javascript
复制
#!/bin/bash

APPS="app1 app2"
LIBS="lib1 lib2"
PROJECTS="${APPS} ${LIBS}"

FAIL=0

pids=()

for project in $PROJECTS
do
  ng lint "${project}" & pids+=( "$!" )
done

for pid in "${pids[@]}"
do
  wait "${pid}" || FAIL=$(( FAIL + 1 ));
done

if [ "$FAIL" != "0" ];
  then
    exit 1
fi
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53862235

复制
相关文章

相似问题

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