首页 > 解决方案 > 运行 awk 命令并使用获取参数的脚本打印 $1

问题描述

我的脚本(称为 test.sh)如下:

#!/bin/bash
for i in "cat myfile | awk -F',' '{print $1}'"; do
     .....

我的问题是我的脚本接收参数(./tesh.sh arg1 arg2)并'{print $1}'采用脚本参数(arg1)而不是 awk 结果,我该如何解决?

标签: bashawk

解决方案


你原来的问题是你写了$1双引号之间。

"cat myfile | awk -F',' '{print $1}'"

如果 bash 变量在双引号字符串中,它们仍然被它们的值替换,而不管它们在双引号内的单引号之间的事实。这就是为什么$1arg1.

第二个问题是你要执行命令:

cat myfile | awk -F',' '{print $1}'

但为此,您需要使用符号$( command )or `command`,但不建议使用后者,因为嵌套很困难。

所以,你的 for 循环应该是这样的:

#!/usr/bin/env bash
for i in $(awk -F ',' '{print $1}' myfile); do
   ...
done

推荐阅读