mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
runtime(sh): Add handling for ksh93 shared-state comsubs and mksh valsubs (#13884)
This commit adds support for ksh93 shared-state command substitutions (syntax: ${ command; }) and mksh's value substitutions (syntax: ${|command;}) in the sh syntax script. Also add a syntax test for ksh subshares with dumps included to make sure it doesn't regress. fixes: #9514 Signed-off-by: Johnothan King <johnothanking@protonmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
49
runtime/syntax/testdir/input/sh_10.sh
Normal file
49
runtime/syntax/testdir/input/sh_10.sh
Normal file
@@ -0,0 +1,49 @@
|
||||
#!/bin/ksh
|
||||
|
||||
# This script is a test file for ksh93 shared-state
|
||||
# command substitutions (subshares) and mksh value
|
||||
# substitutions (valsubs).
|
||||
|
||||
# ======
|
||||
# Below is subshare syntax supported by both ksh93 and mksh.
|
||||
print ${ echo one }
|
||||
print ${ echo two
|
||||
}
|
||||
print ${
|
||||
echo three }
|
||||
print ${ echo 'four'; }
|
||||
print ${ echo 'five' ;}
|
||||
print ${ echo 'six'
|
||||
}
|
||||
print ${ echo 'seven' }
|
||||
echo ${ print 'eight' }
|
||||
typeset nine=${ pwd; }
|
||||
|
||||
# ======
|
||||
# Value substitutions of the form ${|command} are only
|
||||
# supported by mksh, not ksh93.
|
||||
if ! command eval '((.sh.version >= 20070703))' 2>/dev/null; then
|
||||
valsubfunc() {
|
||||
REPLY=$1
|
||||
}
|
||||
echo ${|valsubfunc ten}
|
||||
print "${|valsubfunc eleven;}"
|
||||
printf '%s' "${|valsubfunc twelve }"
|
||||
unlucky=${|valsubfunc thirteen
|
||||
}
|
||||
typeset notafloat=${|valsubfunc notanumber }
|
||||
print $unlucky $notanumber
|
||||
${|echo foo}
|
||||
${|echo bar
|
||||
}
|
||||
fi
|
||||
|
||||
# ======
|
||||
# Shared-state command substitutions using the syntax ${<file;}
|
||||
# are only supported by ksh93, not mksh.
|
||||
echo ${
|
||||
printf %s str
|
||||
} > /tmp/strfile
|
||||
echo ${</tmp/strfile;}
|
||||
|
||||
exit 0
|
Reference in New Issue
Block a user