RosettaCodeData/Task/Stack/UNIX-Shell/stack-1.sh

34 lines
488 B
Bash

init() {
if [[ -n $KSH_VERSION ]]; then
set -A stack
else
stack=(); # this sets stack to '()' in ksh
fi
}
push() {
stack=("$1" "${stack[@]}")
}
stack_top() {
# this approach sidesteps zsh indexing difference
set -- "${stack[@]}"
printf '%s\n' "$1"
}
pop() {
stack_top
stack=("${stack[@]:1}")
}
empty() {
(( ${#stack[@]} == 0 ))
}
# Demo
push fred; push wilma; push betty; push barney
printf 'peek(stack)==%s\n' "$(stack_top)"
while ! empty; do
pop
done