expression - bash variable evaluating with quote for special character -


below simple bash script test few password in rar file. when password contains special character (!), see option (-p) parsed quote (').

#!/bin/bash -x  pwd=`echo sei{0..9}{0..9}b{0..9}axq!zx` #pwd=sei03b4axq!zx file="test.rar" eachpwd in $pwd     eval unrar x "$file" -p"$eachpwd" id 2>/dev/null 1>/dev/null     c=$?     if [ $c = 0 ]         echo "success"         exit     fi     echo $eachpwd $c done 

output

+ eachpwd in '$pwd' + eval unrar x test.rar '-psei49b4axq!zx' id + c=10 + '[' 10 = 0 ']' + echo 'sei49b4axq!zx' 10 

question
how code such that, during eval not unrar x test.rar '-psei49b4axq!zx' id instead unrar x test.rar -psei49b4axq!zx id evaluated expression

update 1
tried below code, still quote(!) on -p option refuses budge.

passwords=( sei{0..9}{0..9}b{0..9}axq!zx ) file=test.rar  password in "${passwords[@]}";     if unrar x "$file" -p"$password" id 2>/dev/null 1>/dev/null;         echo "success"         exit     else         echo $password failed.     fi done 

result

   + password in '"${passwords[@]}"'     + unrar x test.rar '-psei21b0axq!zx' id     + echo 'sei21b0axq!zx' failed.     sei21b0axq!zx failed.     + password in '"${passwords[@]}"'     + unrar x test.rar '-psei21b1axq!zx' id 

please note using bash shell execution.

there couple of possible explanations happening, none of worth exploring because don't need use eval. also, it's better use array hold passwords, or put brace expression directly in for loop, rather creating single string.

# use single quotes on small chance history expansion # enabled, protect !. can drop them. passwords=( sei{0..9}{0..9}b{0..9}'axq!zx' )  password in "${passwords[@]}";     if unrar x "$file" -p "$eachpwd" id 2>/dev/null 1>/dev/null;         echo "success"         exit     fi done 

Comments

Popular posts from this blog

database - VFP Grid + SQL server 2008 - grid not showing correctly -

jquery - Set jPicker field to empty value -

c# - Convert XDocument to byte array (and byte array to XDocument) -