The Stack Overflow podcast is back! Listen to an interview with our new CEO.
2 of 2 added 1 character in body

First make a script that takes two parameters: the keyword and the url:

mkdir -p $1
cat > $1/$1.txt << EOF
echo [\$@]
echo "command=xdg-open \\" $2 \$@\\""
echo "icon="
echo "subtext=Search on $1 for \$@"

make it executable (chmod +x and test it until calling it with two parameters gets you the right result. (mkdir's -p option prevents complaining that the directory already exists). Especially focus on escaping the $ and \ to be preserved in the output.

Once you have that, call the script for every line with two parameters:

awk -F "," '{print "./ " $1 " " $2}' web_url.csv  | sh

The way you have been doing it, you walk over all keyword (for word in $key) but you don't have the matching URL to do the proper thing.

I am not sure how to fix that, but if you need to do multiple things, always try to do one of those things correctly, then focus on how to use that solution multiple times. Being unfamiliar with awk I had to experiment without piping the output into sh until I could see the would be called correctly:

awk -F "," '{print "./ " $1 " " $2}' web_url.csv  

gives as output:

./ drive
./ wikipedia
./ wolframalpha