bash 命令中的 {}

bash 命令中的 {}

我试图在 bash 变量上使用该命令,但出现错误。我认为这是由于{}命令中的 引起的,但我不知道如何解决。

命令是:

add_Area="awk -F\t '{$1="area" FS $1;}1' OFS='\t'"
Output="$( echo $some_csv_-var | ${add_Area})"

错误是:

awk: 1: unexpected character '''  
fileawk: line 2: missing } near end of file

答案1

一般来说,将命令嵌入到变量中然后执行该变量并不是一个好主意。不过,您可以使用一个函数来实现这一点。

首先,让我们解释一下发生了什么以及为什么会出现错误。这都是关于评估顺序的。

add_Area="awk -F\t '{$1="area" FS $1;}1' OFS='\t'"

字符串周围的双引号允许 shell 计算变量。在这种情况下,$1shell 会看到并处理 ,并且它很可能未设置。此外,您尝试将双引号放在双引号内,这实际上意味着双引号部分会停止并稍后重新启动。结果分配变成这样:

add_Area="awk -F\t '{=area FS ;}1' OFS='\t'"

当您尝试在下一行运行它时,它会失败,因为它在语法上不正确。

现在让我们看一下解决我认为您想要实现的目标的方法。

# Declare a function
add_Area() {
    awk -F$'\t' 'BEGIN { OFS = FS } { $1 = "area" FS $1 } 1'
}

# Use the function as if it were a normal command
Output="$( echo "$some_csv_var" | add_Area )"

# Later
echo "$Output"

相关内容