#!/bin/bash function chr { printf -v chr \\\\%o $1 printf -v chr $chr } function asc { local arg="${1:0:1}" local -i upper=256 local -i lower=0 until let asc=(upper+lower)/2 chr $asc [ "$chr" == "$arg" ] do if [ "$chr" '>' "$arg" ] then let upper=asc else let lower=asc fi done } function url_escape { local c url_escape='' for ((i=0; i<${#1}; i++)) do c="${1:$i:1}" [[ "$c" == [-\!\$\'\(\)\*+,.0-9A-Z_a-z] ]] || { asc "$c" printf -v c %%%02X $asc } url_escape="$url_escape$c" done } function google_search { url_escape "$1" echo "http://www.google.com/search?q=$url_escape&hl=en" } IFS=+ google_search "$*"