我想创建一个迭代数组的bash函数,如果数组中不存在作为参数传递的元素,则返回0
,否则返回1
。
但以下代码不会在stdout
上打印任何内容。
function checkparsed {
tocheck="$1"
shift
for item in $@
do
if [ "$item" = "$tocheck" ]; then
return 0
fi
done
return 1
}
mdfiles=('foo')
echo "$(checkparsed foo ${mdfiles[@]})"
答案 0 :(得分:1)
这一行是问题所在:
echo "$(checkparsed foo ${mdfiles[@]})"
因为您的函数没有回显任何内容,但您返回的值为0
或1
。
您实际上需要检查$?
函数的返回值:
checkparsed foo ${mdfiles[@]}
echo $?
0
或者在条件评估中使用返回值:
checkparsed foo ${mdfiles[@]} && echo "found" || echo "not found"
found
checkparsed food ${mdfiles[@]} && echo "found" || echo "not found"
not found
答案 1 :(得分:1)
您正在捕获该函数的输出(没有)。
要打印0
或1
,请直接在echo
函数中执行这些操作(不要忘记return
),或在运行后使用echo $?
功能。
要处理${mdfiles[@]}
中元素中的空格和glob字符,您应该使用双引号:
for item in "$@"
# and
checkparsed foo "${mdfiles[@]}"