📄 356.html
字号:
"function _shift" <br>
"{ if [[ ${1-argv} = argv ]]" <br>
" then trap 'set -- "${argv[@]}"" <br>
" shift 2" <br>
" set -A argv "" "$@"' EXIT" <br>
" else typeset _varx=$1" <br>
" eval set -- ""${$1[@]?}""" <br>
" shift" <br>
" set -A $_varx "$@"" <br>
" fi}" <br>
"# emulate the csh implementation of "source"" <br>
"typeset -fx _source" <br>
"function _source" <br>
"{ if file ${1:?source -- Too few arguments} 2>&- |" <br>
" grep -s '/bin/k?sh'" <br>
" then trap '. "$@"' EXIT" <br>
" else print -u2 cannot source "$1" -- not k/sh script" <br>
" exit 1" <br>
" fi}" <br>
"# directory stack: emulate the csh implementation of "dirs"" <br>
"typeset -fx dirs" <br>
"function dirs" <br>
"{ # display directory stack" <br>
" set -o noglob +o nounset" <br>
" typeset dir" <br>
" (($#>=2)) &&" <br>
" { print -ru2 'dirs: Too many arguments'" <br>
" return 1" <br>
" }" <br>
" if [[ $1 = -l ]]" <br>
" then for dir in ${_dirstack[*]:-$PWD/}" <br>
" do print -nr -- "${dir%/} "" <br>
" done" <br>
" else for dir in ${_dirstack[*]:-$PWD/}" <br>
" do dir=${dir#$HOME/}" <br>
" case $dir in" <br>
" ('') print -nr -- '~ ' ;;" <br>
" (/*) print -nr -- "${dir%/} " ;;" <br>
" (*) print -nr -- "~/${dir%/} " ;;" <br>
" esac" <br>
" done" <br>
" fi" <br>
" print}" <br>
"# directory stack: emulate the csh implementation of "popd"" <br>
"typeset -fx popd" <br>
"function popd" <br>
"{ # cd to and/or delete stack entry" <br>
" set -o noglob +o nounset" <br>
" if ((!$#))" <br>
" then # pop directory off the stack, cd to new top" <br>
" if cd ${_dirstack[1]:?Directory stack empty.}" <br>
" then unset _dirstack[0]" <br>
" set -A _dirstack ${_dirstack[*]}" <br>
" dirs" <br>
" else unset _dirstack[0]" <br>
" set -A _dirstack ${_dirstack[*]}" <br>
" return 1" <br>
" fi" <br>
" elif [[ $# = 1 && $1 = ++([0-9]) ]]" <br>
" then # case of popd +n: delete nth dir from stack" <br>
" typeset -i ndir" <br>
" set ${1#+}" <br>
" # uncomment to use last element if param exceeds permissible:" <br>
" #let "$1 > (ndir=${#_dirstack[*]}-1)" && set -- $ndir" <br>
" let "$1 > ${#_dirstack[*]}-1" &&" <br>
" { print -u2 'popd: Directory stack not that deep.'" <br>
" return 1" <br>
" }" <br>
" (($1<=0)) &&" <br>
" { print -u2 'popd: Bad directory.'" <br>
" return 1" <br>
" }" <br>
" unset _dirstack[$1]" <br>
" set -A _dirstack ${_dirstack[*]}" <br>
" dirs" <br>
" else print -u2 'popd: Too many arguments.'" <br>
" return 1" <br>
" fi}" <br>
"# directory stack: emulate the csh implementation of "pushd"" <br>
"typeset -fx pushd" <br>
"function pushd" <br>
"{ # make new top of stack cwd" <br>
" set -o noglob +o nounset" <br>
" if ((!$#))" <br>
" then # case of pushd without args; swap top two directories" <br>
" if cd ${_dirstack[1]:?No other directory.} 2>&-" <br>
" then set +A _dirstack ${_dirstack[1]} ${_dirstack[0]}" <br>
" dirs" <br>
" else print -ru2 " <br>
" "pushd: ${_dirstack[1]}: No such file or directory."" <br>
" return 1" <br>
" fi" <br>
" elif [[ $# = 1 && $1 = ++([0-9]) ]]" <br>
" then # case of pushd +n: rotate left n times directory stack" <br>
" typeset -i ndir nrot=${1#+}" <br>
" typeset firstdir" <br>
" # uncomment to use last element if param exceeds permissible:" <br>
" #let "nrot+1>(ndir=${#_dirstack[*]})" && let nrot=ndir-1" <br>
" let "nrot > (ndir=${#_dirstack[*]}-1)" &&" <br>
" { print -ru2 'pushd: Directory stack not that deep.'" <br>
" return 1" <br>
" }" <br>
" ((nrot<=0)) &&" <br>
" { print -ru2 'pushd: +0: No such file or directory.'" <br>
" return 1" <br>
" }" <br>
" while let '(nrot-=1)>=0'" <br>
" do firstdir=${_dirstack[0]}" <br>
" unset _dirstack[0]" <br>
" set -A _dirstack ${_dirstack[*]} $firstdir" <br>
" done" <br>
" cd ${_dirstack[0]} && dirs" <br>
" elif (($#==1))" <br>
" then # one argument is directory to push" <br>
" if cd ${1:?No such file or directory.} 2>&-" <br>
" then set -A _dirstack ~+/ ${_dirstack[*]:-$OLDPWD/}" <br>
" dirs" <br>
" else print -ru2 "pushd: $1: No such file or directory."" <br>
" return 1" <br>
" fi" <br>
" else print -ru2 'pushd: Too many arguments.'" <br>
" return 1" <br>
" fi}" <br>
"LINENO=0"<br>
}<br>
<br>
{donescan="OFF" }# like a "next" command, except ...<br>
<br>
/^[ ]*($|#)/ {# empty line or comment<br>
# Suppress newlines between case patterns, so that<br>
# introduced escaped newlines will act appropriately.<br>
if (prevcase==NR-1)<br>
prevcase+=1<br>
else<br>
print<br>
next<br>
}<br>
<br>
{gsub("[ ]+;", ";")# so that "command ;" !~ /command[ ]/<br>
if ($0!~/[ ]+/)<br>
sub("[ ]+$", "")<br>
sub(";$", "")<br>
}<br>
<br>
/$/ {# normalize and convert variable syntax<br>
#XXX must appear before `.*`<br>
gsub("${?", "${#"); gsub("$?", "$#")<br>
gsub("${?#?[A-Za-z_][A-Za-z_0-9]+([.*]])?}?", "!<!&!>!")<br>
gsub("$[1-9]", "!<!&!>!")<br>
#<br>
# delimit variable with braces, if none exist:<br>
gsub("!>![", "[")<br>
if (gsub("]", "&}"))<br>
gsub("]}}", "]}")<br>
if (gsub("!<!$", "&{"))<br>
gsub("!<!${{", "!<!${")<br>
if (gsub("!>!", "}&"))<br>
gsub("}}!>!", "}!>!")<br>
#<br>
# add default "[@]" array indices, if none exist:<br>
gsub("[*]", "[@]")# [*] -> [@]<br>
# turn positional parameters into argv array r-values (for robustness)<br>
if (casualvars!="ON")<br>
if (gsub("${[1-9]}!>!", "${argv[!#!&!#!"))<br>
{gsub("!#!${", "")<br>
gsub("}!>!!#!", "]}")<br>
}<br>
if (casualvars!="ON")<br>
if (gsub("}!>!", "[@]&"))<br>
gsub("[@][@]", "[@]")# ${var} -> ${var[@]}<br>
gsub("}[", "[")# ${var}[ -> ${var[<br>
#<br>
# substitute special variables:<br>
gsub("$#0", "${0:+1}")# special case: $?0 must be in ((...))<br>
gsub("${status[@]}", "$?")<br>
gsub("${child[@]}", "$!")<br>
gsub("${cwd[@]}", "${PWD}")<br>
#<br>
# miscellaneous:<br>
gsub("![<>]!", "")<br>
#XXXgsub(":g[ehrtq]", "")# specifiers won't work on array elmts<br>
gsub(":q", "")# implement instead using dquotes!<br>
gsub("}:e", "##*.}")<br>
gsub("}:h", "%/*}")<br>
gsub("}:r", "%.*}")<br>
gsub("}:t", "##*/}")<br>
}<br>
<br>
/(^|[ ;&|])set[ ]/ {# set command syntax<br>
#XXX $0 alert! (must then be EOL)<br>
# "set var = ( ... )"<br>
# -xor-<br>
# "set var = value" -or- "set var=value" -or- "set var"<br>
# "set echo/ignoreeof/noclobber/noglob/nonomatch/notify/verbose"<br>
sub("(^|[ ]+)set[ ]+", "")<br>
if (gsub("[ ]+=", "="))<br>
gsub("=[ ]+", "=")<br>
if ($0~")($|[ ])")<br>
{# "set var=(...)" -> "set -A var ... ;"<br>
gsub("[^ ]+=(", " ; set -A &")<br>
gsub("=(", " ")<br>
gsub(")", " ; ")<br>
gsub("set -A argv[^;]*", "& && set -- "${argv[@]}"")<br>
sub("^ ; ", "")<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -