我必须以一个数字作为第一个参数,并对各个数字进行数学运算。
下面的程序应该输出所有单独的数字。
INPUT=$1
doMath() {
awk '{split('$INPUT',a,"");printf "'${@$INPUT}'"}'
}
doMath
我用命令执行./armstrong_numbers.sh 657823
并收到错误'{split('$INPUT',a,"");printf "'${@$INPUT}'"}': 错误替换
答案1
你把数组搞混bash
了awk
。
您的示例命令将其拆分$INPUT
为awk
数组名为a
.
另外,您需要使用BEGIN{...}
而不是{...}
,否则awk
将等待您不提供的输入。
尝试这个,
awk 'BEGIN{split('$INPUT',a,""); for (k in a) print a[k]; }'
或者更好地设置变量以-v
避免输入错误的问题。
awk -v "input=$INPUT" \
'BEGIN{split(input,a,""); for (k in a) print a[k]; }'
输出是:
6
5
7
8
2
3
或者只是做所有事情bash
:
for ((i=0;i<${#INPUT};i++)); do
echo ${INPUT:$i:1};
done