33 lines
525 B
Bash
33 lines
525 B
Bash
init_stack() {
|
|
if [[ -n $KSH_VERSION ]]; then
|
|
eval 'set -A '"$1"
|
|
else
|
|
eval "$1=()"
|
|
fi
|
|
}
|
|
|
|
push() {
|
|
eval "$1"'=("$2" "${'"$1"'[@]}")'
|
|
}
|
|
|
|
stack_top() {
|
|
eval 'set -- "${'"$1"'[@]}"';
|
|
printf '%s\n' "$1"
|
|
}
|
|
|
|
pop() {
|
|
stack_top "$1";
|
|
eval "$1"'=("${'"$1"'[@]:1}")'
|
|
}
|
|
|
|
empty() {
|
|
eval '(( ${#'"$1"'[@]} == 0 ))'
|
|
}
|
|
|
|
init_stack mystack
|
|
push mystack fred; push mystack wilma; push mystack betty; push mystack barney
|
|
printf 'peek(mystack)==%s\n' "$(stack_top mystack)"
|
|
while ! empty mystack; do
|
|
pop mystack
|
|
done
|