kjo*_*kjo 19 shell shell-script arguments
基本上,我想-inf从参数列表中“提取”第一次出现。(其余参数将传递给不同的命令。)
我的脚本具有以下结构:
#!/bin/sh
<CODE>
for POSITIONAL_PARAM in "$@"
do
<CODE>
if [ "$POSITIONAL_PARAM" = '-inf' ]
then
<PLUCK $POSITIONAL_PARAM FROM $@>
break
fi
<CODE>
done
<CODE>
some-other-command "$@"
# end of script
Run Code Online (Sandbox Code Playgroud)
有没有好的方法可以做到这一点?
顺便说一句,尽管我主要对适用于 的答案感兴趣,但我/bin/sh也对仅适用于/bin/bash.
cuo*_*glm 33
POSIXly:
for arg do
shift
[ "$arg" = "-inf" ] && continue
set -- "$@" "$arg"
done
printf '%s\n' "$@"
Run Code Online (Sandbox Code Playgroud)
上面的代码甚至可以在 POSIX 之前的 shell 中工作,除了原始的 Almquist shell(阅读尾注)。将for循环更改为:
for arg
do
...
done
Run Code Online (Sandbox Code Playgroud)
保证在所有 shell 中工作。
另一个POSIX:
for arg do
shift
case $arg in
(-inf) : ;;
(*) set -- "$@" "$arg" ;;
esac
done
Run Code Online (Sandbox Code Playgroud)
这一个,你需要删除第一个(中(pattern),使之在预POSIX壳工作。