Johnothan King | b0691b4 | 2025-05-21 21:21:14 +0200 | [diff] [blame^] | 1 | #!/bin/ksh |
| 2 | |
| 3 | # Rendering namespace variables |
| 4 | echo ${.foo.bar[adsf]} ${foo.bar[1][2]} ${foo.bar[1][az]} ${.foo.bar[1][2]} |
| 5 | echo ${.foo[var]} ${.foo.bar[1]} ${.foo.bar[*]} ${foo.bar##baz} ${.foo.bar##baz} |
| 6 | echo ${.foo.bar[3]##baz} ${.foo.bar[z]##baz} ${sh.version/V/b} ${.sh.version/V/b} |
| 7 | echo ${foo/%bar/foo} ${foo/#bar/foo} ${foo.bar/%bar/foo} ${foo.bar[d]/#bar/foo} |
| 8 | echo ${.foo/%barfoo} ${.foo.bar/#bar/foo} ${.bar.foo/%bar/foo} ${.bar/#bar/foo} |
| 9 | echo ${foo/%barfoo} ${foo/bar/foo} ${barfoo//bar/foo} ${bar/#bar/foo} |
| 10 | echo ${.sh.version^^} ${.sh.version,,} ${KSH_VERSION^} ${KSH_VERSION,} |
| 11 | |
| 12 | # 'alarm' builtin (present in ksh93u+, ksh93v- and the 93u+m dev branch). |
| 13 | alarm --man |
| 14 | # The fds and pids builtins. These ksh93 builtins have existed since 2005-05-22 |
| 15 | # and 2008-06-02, respectively. However, these were not readily enabled; in |
| 16 | # 93u+m these can be enabled with the builtin command if libcmd.so is present, |
| 17 | # either via 'builtin -f' or (in more recent commits) with a regular invocation |
| 18 | # of the 'builtin' built-in. |
| 19 | # cf. https://github.com/ksh93/ksh/commit/f15e2c41 |
| 20 | builtin fds pids |
| 21 | fds; pids |
| 22 | |
| 23 | # Unix commands which are provided by ksh as builtins via libcmd.so |
| 24 | basename |
| 25 | cat |
| 26 | chgrp |
| 27 | chmod |
| 28 | chown |
| 29 | cksum |
| 30 | cmp |
| 31 | comm |
| 32 | cp |
| 33 | cut |
| 34 | date |
| 35 | dirname |
| 36 | egrep # Obsolescent |
| 37 | expr |
| 38 | fgrep # Obsolescent |
| 39 | fmt |
| 40 | fold |
| 41 | getconf |
| 42 | grep |
| 43 | head |
| 44 | iconv # 93v- |
| 45 | id |
| 46 | join |
| 47 | ln |
| 48 | logname |
| 49 | ls # 93v- |
| 50 | md5sum |
| 51 | mkdir |
| 52 | mkfifo |
| 53 | mktemp |
| 54 | mv |
| 55 | od # 93v- |
| 56 | paste |
| 57 | pathchk |
| 58 | readlink # 93v- |
| 59 | realpath # 93v- |
| 60 | rev |
| 61 | rm |
| 62 | rmdir |
| 63 | sha1sum # 93v- |
| 64 | sha256sum # 93v- |
| 65 | sha2sum # 93v- |
| 66 | sha384sum # 93v- |
| 67 | sha512sum # 93v- |
| 68 | stty |
| 69 | sum |
| 70 | sync |
| 71 | tail |
| 72 | tee |
| 73 | tr # 93v- |
| 74 | tty |
| 75 | uname |
| 76 | uniq |
| 77 | vmstate # Obsolescent; only available in 93v- and older |
| 78 | wc |
| 79 | xargs # 93v- |
| 80 | xgrep # 93v- |
| 81 | |
| 82 | # SHA command not provided as a builtin but included here for completeness |
| 83 | sha224sum |
| 84 | |
| 85 | # poll builtin (93v-) |
| 86 | poll --man |
| 87 | |
| 88 | # mkservice and eloop (rarely provided; requires SHOPT_MKSERVICE) |
| 89 | mkservice --man; eloop --help |
| 90 | |
| 91 | # some mksh builtins |
| 92 | bind; rename |
| 93 | |
| 94 | # ;& and ;;& in case statements |
| 95 | case x in |
| 96 | bar) false ${baz:1} ;& |
| 97 | foo) true ${foo:0:0} ;;& |
| 98 | *) print ${bar} ;; |
| 99 | esac |
| 100 | |
| 101 | # Below is subshare syntax supported by both ksh93 and mksh. |
| 102 | print ${ echo one } |
| 103 | print ${ echo two |
| 104 | } |
| 105 | print ${ |
| 106 | echo three } |
| 107 | print ${ echo 'four'; } |
| 108 | print ${ echo 'five' ;} |
| 109 | print ${ echo 'six' |
| 110 | } |
| 111 | print ${ echo 'seven' } |
| 112 | echo ${ print 'eight' } |
| 113 | typeset nine=${ pwd; } |
| 114 | |
| 115 | # Value substitutions of the form ${|command} are only |
| 116 | # supported by mksh, not ksh93. |
| 117 | if ! command eval '((.sh.version >= 20070703))' 2>/dev/null; then |
| 118 | valsubfunc() { |
| 119 | REPLY=$1 |
| 120 | } |
| 121 | echo ${|valsubfunc ten} |
| 122 | print "${|valsubfunc eleven;}" |
| 123 | printf '%s' "${|valsubfunc twelve }" |
| 124 | unlucky=${|valsubfunc thirteen |
| 125 | } |
| 126 | typeset notafloat=${|valsubfunc notanumber } |
| 127 | print $unlucky $notanumber |
| 128 | ${|echo foo} |
| 129 | ${|echo bar |
| 130 | } |
| 131 | fi |
| 132 | |
| 133 | # ====== |
| 134 | # Shared-state command substitutions using the syntax ${<file;} |
| 135 | # are only supported by ksh93, not mksh. |
| 136 | echo ${ |
| 137 | printf %s str |
| 138 | } > /tmp/strfile |
| 139 | echo ${</tmp/strfile;} |
| 140 | |
| 141 | exit 0 |
| 142 | # ksh88 and ksh93 non-dot special variables |
| 143 | print ${ RANDOM= SRANDOM= SHLVL= JOBMAX= KSH_VERSION= FIGNORE= LC_TIME= LC_NUMERIC= LC_MESSAGES= LC_CTYPE= LC_COLLATE= LC_ALL= LANG= FPATH= PS4= OPTIND= OPTARG= true ;} |
| 144 | print $(LINENO= SECONDS= TMOUT= PPID= LINES= COLUMNS= VISUAL= OLDPWD= PS3= MAILPATH= CDPATH= FCEDIT= HISTCMD= HISTEDIT= HISTSIZE= HISTFILE= ENV= MAILCHECK= EDITOR= SHELL= false) |
| 145 | print $(REPLY= MAIL= HOME= PWD= IFS= PS2= PS1= PATH= SH_OPTIONS= ERRNO= COMP_CWORD= COMP_LINE= COMP_POINT= COMP_WORDS= COMP_KEY= COMPREPLY= COMP_WORDBREAKS= COMP_TYPE= compgen) |
| 146 | print $(BASHPID= EPOCHREALTIME= EXECSHELL= KSHEGID= KSHGID= KSHUID= KSH_MATCH= PATHSEP= PGRP= PIPESTATUS= TMPDIR= USER_ID= VPATH= CSWIDTH= complete) |