-
-
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_Tor 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
ifon line 14 and also had to wrap$argin 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_Tor something, though that seems less clear to me.