我有一个带有参数的脚本,我想删除给定的命名参数
例如脚本.sh a b c 我想删除 'b' 这样
$1 = a
$2 = c
这也必须适用于任何给定的参数集,例如
script.sh "a 1" b "c 2"
$1 = "a 1"
$2 = "c 2"
之前的回答说
for var in "$@"; do
case $var in
"a") echo -n $var ;;
"b") ;;
esac
done
上一个答案的通用版本应该是(为了删除 b)
for var in "$@"; do
case $var in
"b") ;;
*) echo -n $var ;;
esac
done
但是对于多个参数这会失败 例如
script.sh a b c
Output: ac
我们想要一个b 我们希望它们位于位置参数 $1=a 和 $2=b
所以需要一个更好的答案。
我就是这样做的,效果很好。 示例从参数列表中删除“b”
# script.sh
# Just to show the passed parameters
echo 1=$1
echo 2=$2
echo 3=$3
echo ===
rmArg()
{
for var in "$@"; do
case $var in
b) ;;
*) echo -n " '$var'" ;;
esac
done
}
args=$( rmArg "$@" )
eval "set $args"
# Just to show the new parameter list
echo 1=$1
echo 2=$2
echo 3=$3
$ script.sh "a 1" b "c 2"
1=a 1
2=b
3=c 2
===
1=a 1
2=c 2
3=