124 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
LC_ALL=C
 | 
						|
LANG=C
 | 
						|
trap 'rm /tmp/newhistory' 0
 | 
						|
 | 
						|
file=bax
 | 
						|
histchars='!^#'	# make sure history comment char is set correctly
 | 
						|
 | 
						|
unset HISTFILESIZE
 | 
						|
 | 
						|
history -c
 | 
						|
 | 
						|
HISTFILE=history.list
 | 
						|
HISTCONTROL=ignoreboth
 | 
						|
HISTIGNORE='&:#*:history*:fc*'
 | 
						|
# we will end up exercising the history stifling code as a result
 | 
						|
HISTSIZE=32
 | 
						|
 | 
						|
shopt -s cmdhist
 | 
						|
set -o history
 | 
						|
 | 
						|
history -p '!!'
 | 
						|
 | 
						|
# this should result in a failed history expansion error
 | 
						|
history -p '!!:z'
 | 
						|
 | 
						|
history
 | 
						|
 | 
						|
HISTFILE=/tmp/newhistory
 | 
						|
history -a
 | 
						|
 | 
						|
history -w
 | 
						|
 | 
						|
history -s "echo line 2 for history"
 | 
						|
history
 | 
						|
history -p '!e'
 | 
						|
history -p '!!'
 | 
						|
 | 
						|
set -H
 | 
						|
!!
 | 
						|
!e
 | 
						|
 | 
						|
history
 | 
						|
 | 
						|
echo a b c d e
 | 
						|
!?ch?
 | 
						|
!-2
 | 
						|
^2^8
 | 
						|
 | 
						|
!2
 | 
						|
 | 
						|
# we're selecting /bin/sh -c ...; we want `sh'
 | 
						|
echo !-1:0:t
 | 
						|
# we're selecting /bin/sh -c ...; we want `/bin'
 | 
						|
echo !-2:0:h
 | 
						|
# we're selecting `echo a b c d e'; we want `e'
 | 
						|
echo !?d?:5
 | 
						|
 | 
						|
echo a b c d e
 | 
						|
echo !-1:2-$
 | 
						|
echo !-2:2-4
 | 
						|
echo !-2:3*
 | 
						|
echo !!:*
 | 
						|
 | 
						|
echo !?a?:2-
 | 
						|
 | 
						|
echo file.c
 | 
						|
echo !!:$:r
 | 
						|
echo !-2:$:e
 | 
						|
echo !-3:$:r:q
 | 
						|
 | 
						|
echo $file.c
 | 
						|
echo !!:$:r
 | 
						|
echo !-2:^:e
 | 
						|
echo !-3:$:r:q
 | 
						|
 | 
						|
echo a b c d e
 | 
						|
echo !!:1-$:x
 | 
						|
echo !-2:1-$:q
 | 
						|
 | 
						|
echo foo.c foo.o foo.html foo.h
 | 
						|
!!:s/foo/bar/
 | 
						|
!-2:gs/foo/bar/
 | 
						|
!!:gs/bar/x&/
 | 
						|
!-2:g&
 | 
						|
 | 
						|
# make sure we can use any delimiter in the substitution, not just `/'
 | 
						|
!!:gs+bar+whix+
 | 
						|
 | 
						|
!!:p
 | 
						|
 | 
						|
# wow
 | 
						|
echo !?.o?:%:r:q
 | 
						|
 | 
						|
!!:0 !?.h?:%:q
 | 
						|
!!:-$
 | 
						|
!:-$
 | 
						|
 | 
						|
history
 | 
						|
 | 
						|
# make sure single quotes inhibit history expansion
 | 
						|
echo '!!'
 | 
						|
 | 
						|
# make sure backslashes can quote the history expansion character
 | 
						|
echo \!\!
 | 
						|
 | 
						|
# but other expansions on the line should still be processed
 | 
						|
 | 
						|
echo '!!' !!:*
 | 
						|
history -c
 | 
						|
unset HISTFILE
 | 
						|
 | 
						|
# make sure that the special bash cases are not history expanded
 | 
						|
case p in
 | 
						|
[!A-Z])	echo ok 1;;
 | 
						|
esac
 | 
						|
 | 
						|
var1='ok 2'
 | 
						|
var2=var1
 | 
						|
 | 
						|
echo ${!var2}
 | 
						|
 | 
						|
# Bash-2.01[.1] fails this test -- it attempts history expansion after the
 | 
						|
# history_comment_char
 | 
						|
echo ok 3 # !1200
 |