我试图在 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 计算变量。在这种情况下,$1
shell 会看到并处理 ,并且它很可能未设置。此外,您尝试将双引号放在双引号内,这实际上意味着双引号部分会停止并稍后重新启动。结果分配变成这样:
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"