summaryrefslogtreecommitdiffstats
path: root/eshtrans/split.sh
diff options
context:
space:
mode:
Diffstat (limited to 'eshtrans/split.sh')
-rw-r--r--eshtrans/split.sh48
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