我在bash中写了这个函数,当我测试它只是打印一个空行时它没有给我任何东西,所以我认为我的问题是我实际运行函数的方式,以及如何给它一行。 - >函数接受一个单词格式的行,并在每个单词之间接受一个空格,现在该行以一个包含5个字母的单词结束,例如:
"狗猫777A"
或以字母结尾后的0-100之间的数字结束:
"狗猫777A 88"
现在该函数接受该行,并且应该打印0-100之间的数字,但如果该数字不存在,则该函数应该打印" - "代替。
这是函数
function get {
local num_words=`echo "$1" | wc -w`
let num_words--
echo "$1" | while read -a line ; do
while (( num_words > 0 )) ; do
number_letters=`echo ${line[$num_words]} | wc -c`
let number_letters--
if (( number_letters < 4 )) ; then
echo "${line[$num_words]}"
break
fi
echo -
break
let num_words--
done
break
done
}
这就是我测试它的方式:
line="444444 wefd sfdggag 987f 98"
result="`echo "$line" | get`"
echo $result
当我运行该函数时,我得到一个空行。
答案 0 :(得分:0)
问题出在你测试时。你应该写:
#!/bin/sh
function get {
local num_words=`echo "$1" | wc -w`
let num_words--
echo "$1" | while read -a line ; do
while (( num_words > 0 )) ; do
number_letters=`echo ${line[$num_words]} | wc -c`
let number_letters--
if (( number_letters < 4 )) ; then
echo "${line[$num_words]}"
break
fi
echo -
break
let num_words--
done
break
done
}
line="444444 wefd sfdggag 987f 98"
#result="`echo "$line" | get`"
result="`get "$line"`"
echo $result
line="cat cats dog 1217A"
result="`get "$line"`"
echo $result
答案 1 :(得分:0)
在函数内部,可以从$ 1,$ 2等检索参数。调用函数时,它们应该遵循其名称:
my_func () {
echo "Argument 1: $1"
echo "Argument 2: $2"
}
my_func arg1 arg2
如果希望函数处理标准输入,请不要使用参数。将它传递给函数。在功能内部,只需处理输入 - 可以通过read
读取,也可以按grep
或其他任何方式对其进行过滤。
my_func () {
let i=1
while read line ; do
echo $((i++)) "$line"
done
}
ls | my_func