为什么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。