bash - 运行 awk 命令并使用获取参数的脚本打印 $1
问题描述
我的脚本(称为 test.sh)如下:
#!/bin/bash
for i in "cat myfile | awk -F',' '{print $1}'"; do
.....
我的问题是我的脚本接收参数(./tesh.sh arg1 arg2
)并'{print $1}'
采用脚本参数(arg1
)而不是 awk 结果,我该如何解决?
解决方案
你原来的问题是你写了$1
双引号之间。
"cat myfile | awk -F',' '{print $1}'"
如果 bash 变量在双引号字符串中,它们仍然被它们的值替换,而不管它们在双引号内的单引号之间的事实。这就是为什么$1
被arg1
.
第二个问题是你要执行命令:
cat myfile | awk -F',' '{print $1}'
但为此,您需要使用符号$( command )
or `command`
,但不建议使用后者,因为嵌套很困难。
所以,你的 for 循环应该是这样的:
#!/usr/bin/env bash
for i in $(awk -F ',' '{print $1}' myfile); do
...
done
推荐阅读
- azure-devops - 连接到 Azure DevOps 服务时,如何在 Visual Studio 而不是 Web 浏览器中打开 Bug/PBI?
- python-3.x - 请解释以下代码的工作原理和下面提到的一些问题
- python - QTreeView QAbstractItemModel 父级在删除项目后崩溃,有时崩溃
- parsing - 在确定标记之前让词法分析器考虑解析器?
- swiftui - SwiftUI:如何在不同的视图中显示 UserDefault 数据
- javascript - 从 JSON 响应创建嵌套评论数组
- r - R summarise 不会从连接结果中删除重复项
- mysql - SQL - 外键和主键不匹配
- docker - Dockerfile:是否允许多个 FROM?
- reactjs - React Hook Async 等待如何在 Promise 上保持渲染