我有以下内容
#!/bin/bash
function f1 ()
{
echo "all parameters with more than 2 characters"
}
f1 123 45 6789
我需要对字符大于 2 的参数执行某些操作。我可以回显它们吗不扩展“$@”到循环然后进行检查wc -c
在这种情况下,我需要输出123 6789
答案1
你不需要扩张 $@
但你应该循环它:
for arg in "$@"
do
[ "${#arg}" -gt 2 ] && printf '%s\n' "$arg"
done
该${#arg}
代码询问 的长度(以字节为单位)$arg
。
答案2
#!/bin/bash
f1(){
tr -s " " "\n" <<< "$@"| grep ...|tr -s "\n" " "
}
答案3
使用以下方法更容易zsh
:
#! /bin/zsh -
f1() print -r -- ${(M)@:#???*}
${array:#pattern}
是从数组的扩展中删除与模式匹配的元素(${var#pattern}
/ ${var##pattern}
ksh 运算符的扩展)。带有M
参数扩展标志(对于匹配的),则相反,仅保留匹配的内容。
答案4
无需外部命令(wc
);尝试在循环中使用“参数扩展/参数长度”。