1*3d4e20a2SAndy Fiddaman#!/usr/bin/ksh 2*3d4e20a2SAndy Fiddaman# 3*3d4e20a2SAndy Fiddaman# This file and its contents are supplied under the terms of the 4*3d4e20a2SAndy Fiddaman# Common Development and Distribution License ("CDDL"), version 1.0. 5*3d4e20a2SAndy Fiddaman# You may only use this file in accordance with the terms of version 6*3d4e20a2SAndy Fiddaman# 1.0 of the CDDL. 7*3d4e20a2SAndy Fiddaman# 8*3d4e20a2SAndy Fiddaman# A full copy of the text of the CDDL should have accompanied this 9*3d4e20a2SAndy Fiddaman# source. A copy of the CDDL is also available via the Internet at 10*3d4e20a2SAndy Fiddaman# http://www.illumos.org/license/CDDL. 11*3d4e20a2SAndy Fiddaman# 12*3d4e20a2SAndy Fiddaman 13*3d4e20a2SAndy Fiddaman# 14*3d4e20a2SAndy Fiddaman# Copyright 2026 Oxide Computer Company 15*3d4e20a2SAndy Fiddaman# 16*3d4e20a2SAndy Fiddaman 17*3d4e20a2SAndy Fiddaman# 18*3d4e20a2SAndy Fiddaman# A quoted shell command can contain a single quote by escaping it as \'. This 19*3d4e20a2SAndy Fiddaman# is what lets a single-quoted command itself contain single quotes (an awk 20*3d4e20a2SAndy Fiddaman# program being a very common example), and the double-quoted form honours the 21*3d4e20a2SAndy Fiddaman# same escape. 22*3d4e20a2SAndy Fiddaman# 23*3d4e20a2SAndy Fiddaman 24*3d4e20a2SAndy Fiddamanexport SHELL=/bin/sh 25*3d4e20a2SAndy Fiddaman 26*3d4e20a2SAndy Fiddamanfunction check { 27*3d4e20a2SAndy Fiddaman typeset desc="$1" expect="$2" got="$3" 28*3d4e20a2SAndy Fiddaman 29*3d4e20a2SAndy Fiddaman if [[ "$got" != "$expect" ]]; then 30*3d4e20a2SAndy Fiddaman print -u2 "FAIL [$desc]: expected [$expect], got [$got]" 31*3d4e20a2SAndy Fiddaman exit 1 32*3d4e20a2SAndy Fiddaman fi 33*3d4e20a2SAndy Fiddaman} 34*3d4e20a2SAndy Fiddaman 35*3d4e20a2SAndy Fiddaman# 36*3d4e20a2SAndy Fiddaman# \' within a single-quoted command. 37*3d4e20a2SAndy Fiddaman# 38*3d4e20a2SAndy Fiddamanout=$($MDB <<'EOF' 39*3d4e20a2SAndy Fiddaman! 'echo \'hi there\'' 40*3d4e20a2SAndy FiddamanEOF 41*3d4e20a2SAndy Fiddaman) 42*3d4e20a2SAndy Fiddamancheck "squote" "hi there" "$out" 43*3d4e20a2SAndy Fiddaman 44*3d4e20a2SAndy Fiddaman# 45*3d4e20a2SAndy Fiddaman# \' within a double-quoted command. 46*3d4e20a2SAndy Fiddaman# 47*3d4e20a2SAndy Fiddamanout=$($MDB <<'EOF' 48*3d4e20a2SAndy Fiddaman! "echo \'hi there\'" 49*3d4e20a2SAndy FiddamanEOF 50*3d4e20a2SAndy Fiddaman) 51*3d4e20a2SAndy Fiddamancheck "dquote" "hi there" "$out" 52*3d4e20a2SAndy Fiddaman 53*3d4e20a2SAndy Fiddaman# 54*3d4e20a2SAndy Fiddaman# An awk program delimited and quoted with \'. 55*3d4e20a2SAndy Fiddaman# 56*3d4e20a2SAndy Fiddamanout=$($MDB <<'EOF' 57*3d4e20a2SAndy Fiddaman! 'awk \'BEGIN { print "ok" }\'' 58*3d4e20a2SAndy FiddamanEOF 59*3d4e20a2SAndy Fiddaman) 60*3d4e20a2SAndy Fiddamancheck "awk" "ok" "$out" 61*3d4e20a2SAndy Fiddaman 62*3d4e20a2SAndy Fiddamanexit 0 63