-
-
Save squito/98b3e2cf9446cf96e5efedbf3ada9f71 to your computer and use it in GitHub Desktop.
#!/bin/bash | |
# this is a demo of how to remove an argument given with the [-arg value] notation for a specific | |
# [arg] (-T in this case, but easy to modify) | |
echo $@ | |
echo $# | |
i=0 | |
ORIGINAL_ARGS=("$@") | |
TRIMMED_ARGS=() | |
while [ $i -lt ${#ORIGINAL_ARGS[@]} ]; do | |
arg=${ORIGINAL_ARGS[$i]} | |
echo "i = $i; oa[i] = $arg" | |
if [ $arg == "-T" ]; then | |
# we want to remove both the "-T" *AND* the following arg. So we advance i here, | |
# and also once more outside of the for loop. | |
i=$((i + 1)) # careful! ((i++)) will kill your script if you use "set -e" | |
else | |
TRIMMED_ARGS+=($arg) | |
fi | |
i=$((i + 1)) # careful! ((i++)) will kill your script if you use "set -e" | |
done | |
echo "TRIMMED_ARGS = ${TRIMMED_ARGS[@]}; length = ${#TRIMMED_ARGS[@]}" |
@siddhpant the point of the example is to modify the following args based on the condition. So you remove both "-T" and the next arg (the value for the arg).
@squito Correct, sorry for overlooking that.
I suppose you could do that with a for loop as well, if you set some variable
last_arg_was_T
or something, though that seems less clear to me.
Something like this:
#!/bin/bash
new_args=()
ignore_next_arg=false
for var in "$@"; do
case $var in
"-T") ;& # Fallthrough
"-X") ;& # And you can go on
"-F") ignore_next_arg=true ;;
*)
if [[ "$ignore_next_arg" == "true" ]]; then
ignore_next_arg=false
else
new_args+=($var)
fi
;;
esac
done
echo "${new_args[*]}"
I had to use the double square bracket if
on line 14 and also had to wrap $arg
in double quotes on line 19.
I had to use the double square bracket
if
on line 14 and also had to wrap$arg
in double quotes on line 19.
oh thanks for pointing this out @kczx3 . I assume you had an argument with a space in it? I think quotes around $arg
in both places would have also worked (but I admit, my bash isn't great). Probably double brackets are fine too.
@siddhpant the point of the example is to modify the following args based on the condition. So you remove both "-T" and the next arg (the value for the arg).
I suppose you could do that with a for loop as well, if you set some variable
last_arg_was_T
or something, though that seems less clear to me.