bash - 在 shell 脚本中,如何正确转义双引号,以便可以使用带引号的参数运行命令?
问题描述
我想在我的 shell 脚本中运行这样的东西:
./node_modules/.bin/npm-run-all -p "ng lint myapp"
我有一个 for 循环来生成带引号的字符串:
LINT=""
for app in $APPS
do
LINT="$LINT \"ng lint ${app}\""
done
我认为使用 \" 将能够生成我想要的字符串。但是当我运行时:
./node_modules/.bin/npm-run-all -p ${LINT}
我得到:
ERROR: Task not found: ""ng", myapp""
似乎正在运行:
./node_modules/.bin/npm-run-all -p \"ng lint myapp\"
什么是转义双引号以便我运行它的正确方法?:
./node_modules/.bin/npm-run-all -p "ng lint myapp"
解决方案
更新:感谢您指出另一个重复的问题和@CharlesDuffy 的评论。我的问题可以这样解决:
#!/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[@]}"
WAIT的另一种方法:
#!/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
推荐阅读
- powerbi - 如何按每个月按状态计算客户数量,以了解每个月有多少客户活跃或入职
- docker - Docker Kubernetes (Mac) - Autoscaler 无法找到指标
- intellij-idea - IntelliJ IDEA 快速文档不显示带有自定义标签的 javadoc
- amazon-web-services - 如何在不公开文件的情况下将文件从一个 S3 存储桶访问到另一个存储桶?
- mysql - 在不使用 IN 语句的情况下重新设计查询
- r - 仅将 geom 默认美学更改为主题组件的一部分
- ruby-on-rails - Rails 5 嵌套路由
- artificial-intelligence - MonteCarloTreeSearch 是否适合这种问题规模(大动作/状态空间)?
- java - 如何使用 akka 流在图中限制请求?
- android - 如何在 Cordova android 应用程序的根目录而不是应用程序数据目录中写入文件?