From 30440b2a1b23d3500eaa8af03e27172832429284 Mon Sep 17 00:00:00 2001 From: Koichi Murase Date: Thu, 17 Feb 2022 06:44:40 +0900 Subject: [PATCH] global: work around bash-3.0 bug that single quotas remains for "${v-$''}" --- lib/core-syntax.sh | 10 ++++++++-- make_command.sh | 19 +++++++++++++++++-- src/util.sh | 2 +- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/lib/core-syntax.sh b/lib/core-syntax.sh index 1fc1608b..b1d9932f 100644 --- a/lib/core-syntax.sh +++ b/lib/core-syntax.sh @@ -472,7 +472,10 @@ function ble/syntax/print-status/nest.get-text { if [[ $nparam == none ]]; then nparam= else - nparam=" nparam=${nparam//$_ble_term_FS/$'\e[7m^\\\e[m'}" + # Note #D1774: bash-3.0 bug "${var//../$'...'}" とすると $'' の引用符が残 + # る問題の回避の為に行を分けて代入する。 + nparam=${nparam//$_ble_term_FS/$'\e[7m^\\\e[m'} + nparam=" nparam=$nparam" fi nest=" nest=($nctx w=$nword n=$nnest t=$nchild:$nprev$nparam)" @@ -526,7 +529,10 @@ function ble/syntax/print-status/stat.get-text { if [[ $snparam == none ]]; then snparam= else - snparam=" nparam=${snparam//"$_ble_term_FS"/$'\e[7m^\\\e[m'}" + # Note #D1774: bash-3.0 bug "${var//$'...'}" とすると余分な引用符が残る問 + # 題を回避する為に行を分けて代入している。 + snparam=${snparam//"$_ble_term_FS"/$'\e[7m^\\\e[m'} + snparam=" nparam=$snparam" fi local stat_lookahead= diff --git a/make_command.sh b/make_command.sh index c7c404de..d78e1b7a 100755 --- a/make_command.sh +++ b/make_command.sh @@ -134,7 +134,16 @@ function sub:check/bash300bug { # bash-3.0 では local -a arr=("$hello") とすると # クォートしているにも拘らず $hello の中身が単語分割されてしまう。 - grc 'local -a [[:alnum:]_]+=\([^)]*[\"'\''`]' --exclude=./test --exclude=./make_command.sh + grc 'local -a [[:alnum:]_]+=\([^)]*[\"'\''`]' --exclude=./{test,ext} --exclude=./make_command.sh + + # bash-3.0 では "${scalar[@]/xxxx}" は全て空になる + grc '\$\{[a-zA-Z_0-9]+\[[*@]\]/' --exclude=./{text,ext} --exclude=./make_command.sh --exclude=\*.md --color | + grep -v '#D1570' + + # bash-3.0 では "..${var-$'hello'}.." は (var が存在しない時) "..'hello'..." になる。 + grc '".*\$\{[^{}]*\$'\''([^\\'\'']|\\.)*'\''\}.*"' --exclude={./make_command.sh,memo,\*.md} --color | + grep -v '#D1774' + } function sub:check/bash301bug-array-element-length { @@ -265,7 +274,13 @@ function sub:check { sub:check/bash502-patsub_replacement sub:check/gawk402bug-regex-check sub:check/array-count-in-arithmetic-expression - sub:check/unset-variable + sub:check/unset-variable | + sed -E 'h;s/'"$esc"'//g;s/^[^:]*:[0-9]+:[[:space:]]*// + \Zunset _ble_init_(version|arg|exit|command)\bZd + \Zbuiltins1=\(.* unset .*\)Zd + \Zfunction unsetZd + \Zreadonly -f unsetZd + g' sub:check/memo-numbering } diff --git a/src/util.sh b/src/util.sh index 2fa694a2..59a9c3b8 100644 --- a/src/util.sh +++ b/src/util.sh @@ -1100,7 +1100,7 @@ else local _ble_local_ret=$? TMOUT= IFS= builtin read -r -d '' "$1" < "$_ble_local_tmpfile" ble/util/assign/.rmtmp - builtin eval "$1=\${$1%$'\n'}" + builtin eval "$1=\${$1%$_ble_term_nl}" return "$_ble_local_ret" } fi