बुकमार्क सिस्टम बनाने के लिए बैश वेरिएबल्स का उपयोग किया जा सकता है। चर किसी भी आदेश के साथ काम करेंगे और बैश चर नाम पूरा करेंगे। बैश के नए संस्करणों में, यदि a / को वैरिएबल नाम से जोड़ा जाता है, तो वैरिएबल पथ में टैब को भी पूरा किया जा सकता है।
mydir=/home/chris/dir
ls $my # Tab completion works on variable name.
ls $mydir/ # Tab completion is equivalent to that with ls /home/chris/dir/
# (doesn't work in older versions of bash).
दृढ़ता के लिए, चर घोषणाओं को एक फ़ाइल में रखा जा सकता है जो .bashrc से ली गई है। चूँकि यह फ़ाइल एक बैश स्क्रिप्ट है, इसमें ऐसी घोषणाएँ हो सकती हैं, जो अन्य चर जैसे संदर्भ aur="${HOME}/AUR", या केवल कुछ मेजबानों पर चलती हैं if [[ $HOSTNAME == foo ]]; then bar=baz; fi, जो कई होस्ट और उपयोगकर्ताओं के लिए कॉन्फ़िगर की गई फ़ाइलों का पुन: उपयोग करने पर उपयोगी होती हैं।
निम्न बैश फ़ंक्शन (इसे .bashrc में जोड़ा जाना चाहिए, या इसमें से सॉरी किया गया है) बुकमार्क को बुकमार्क फ़ाइल से जोड़ा और हटाया जा सकता है। यह काफी नया है और बग्स से मुक्त होने की गारंटी नहीं है।
bookmark_file=~/.bookmarks
source "$bookmark_file"
bm() {
usage='Usage:
bm add <name> <path> Create a bookmark for path.
bm add <name> Create a bookmark for the current directory.
bm update Source the bookmark file.
bm remove <name> Remove a bookmark'
case $1 in
add)
local path
if [[ $# -eq 2 ]]; then
path=.
elif [[ $# -eq 3 ]]; then
if [[ -e $3 ]]; then
path="$3"
else
echo "bm: ${3}: No such file or directory."
return 1
fi
else
echo "$usage"
return 1
fi
if declare | grep "^${2}=" > /dev/null; then
echo "bm: The name $2 is in use."
return 1
fi
path=$(readlink -f "$path")
echo ${2}=\""$path"\" >> "$bookmark_file"
eval ${2}=\""$path"\"
return 0
;;
update)
if [[ $# -eq 1 ]]; then
source "$bookmark_file"
return 0
fi
;;
remove)
if [[ $# -eq 2 ]]; then
unset $2
local contents=$(grep -v "^${2}=" "$bookmark_file")
echo "$contents" > "${bookmark_file}.tmp"
rm -f "$bookmark_file"
mv "${bookmark_file}.tmp" "$bookmark_file"
return 0
fi
;;
esac
echo "$usage"
return 1
}