为什么awk算法不起作用?

为什么awk算法不起作用?,awk,arithmetic-expressions,Awk,Arithmetic Expressions,我有一个简单的脚本: #!/bin/sh #NOTE - this script does not work! #column=${1:-1} column=1+1 awk '{print $'$column'}' 但是当你跑的时候 ls -la | ~/test/Column.sh 我总是收到 1 1 1 1 问题出在哪里?您的脚本相当于: awk '{print $1+1}' 在您的示例中,Awk尝试在ls-al输出的第一列中添加一个,即文件类型和模式位。这不是一个数字,所以它被转换

我有一个简单的脚本:

#!/bin/sh
#NOTE - this script does not work!
#column=${1:-1}
column=1+1
awk '{print $'$column'}'
但是当你跑的时候

ls -la | ~/test/Column.sh
我总是收到

1
1
1
1

问题出在哪里?

您的脚本相当于:

awk '{print $1+1}'
在您的示例中,Awk尝试在ls-al输出的第一列中添加一个,即文件类型和模式位。这不是一个数字,所以它被转换为0。将一和零相加,得到输出。 见:

无法解释为有效数字的字符串将转换为零

如果希望shell计算数字,请尝试:

column=$(expr 1 + 1)
甚至

column=$((1 + 1))

您的脚本相当于:

awk '{print $1+1}'
在您的示例中,Awk尝试在ls-al输出的第一列中添加一个,即文件类型和模式位。这不是一个数字,所以它被转换为0。将一和零相加,得到输出。 见:

无法解释为有效数字的字符串将转换为零

如果希望shell计算数字,请尝试:

column=$(expr 1 + 1)
甚至

column=$((1 + 1))

如果这是纯伯恩壳牌,而不是:

column=1+1
试试这个:

column=`expr 1+1`
如果是bash,则应该是:

column=$[1+1]

请参见此处:

如果这是纯bourne shell,而不是:

column=1+1
试试这个:

column=`expr 1+1`
如果是bash,则应该是:

column=$[1+1]

请参见此处:

这里的awk中没有算术,只有shell。shell不支持a=1+1。这里awk中没有算术,只有shell。并且外壳不支持a=1+1。