diff options
Diffstat (limited to 'eshtrans')
-rw-r--r-- | eshtrans/split.sh | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/eshtrans/split.sh b/eshtrans/split.sh new file mode 100644 index 0000000..bfc51cd --- /dev/null +++ b/eshtrans/split.sh @@ -0,0 +1,48 @@ +set -u + +buf="Hello, 'world'!" + +old() +{ + eval "$(printf '%s' "${buf}" | awk -v FS='' -v j=0 \ + -v squote="'" -v esc_squote="'\\\\''" ' + { + for (i = 1; i <= NF; ++i) { + sub(squote, esc_squote, $i); + printf("lbufv_%d='\''%s'\''\n", j++, $i); + }; + printf("lbufv_%d='\''\n'\''\n", j++); + } + ')" +} + +new() +{ + eval "$(printf '%s' "${buf}" | awk -v FS='' -v j=0 \ + -v squote="'" -v esc_squote="'\\\\''" ' + { + for (i = 1; i <= NF; ++i) { + sub(squote, esc_squote, $i); + printf("lbufv_%d=" squote "%s" squote "\n", + j++, $i); + }; + printf("lbufv_%d=" squote "\n" squote "\n", j++); + } + ')" +} + +print_and_clear() +{ + i=0 + while [ ${i} -le ${#buf} ]; do + c=$(eval "printf '%sx' \"\${lbufv_${i}}\"") + eval "lbufv_${i}=" + printf 'i: %2d, c: "%s"\n' ${i} "${c%x}" + i=$((${i} + 1)) + done +} + +old +print_and_clear +new +print_and_clear |