प्रारूप जिसे शेल इनपुट के रूप में पुन: उपयोग किया जा सकता है
इस तरह के अनुरोध के लिए एक विशेष printf प्रारूप निर्देश ( %q) बनाया गया है:
Printf [-v var] प्रारूप [तर्क]
%q causes printf to output the corresponding argument
in a format that can be reused as shell input.
कुछ नमूने:
read foo
Hello world
printf "%q\n" "$foo"
Hello\ world
printf "%q\n" $'Hello world!\n'
$'Hello world!\n'
इसका उपयोग चर के माध्यम से भी किया जा सकता है:
printf -v var "%q" "$foo
"
echo "$var"
$'Hello world\n'
सभी के साथ त्वरित जांच (128) ascii बाइट्स:
ध्यान दें कि 128 से 255 तक के सभी बाइट्स से बचना होगा।
for i in {0..127} ;do
printf -v var \\%o $i
printf -v var $var
printf -v res "%q" "$var"
esc=E
[ "$var" = "$res" ] && esc=-
printf "%02X %s %-7s\n" $i $esc "$res"
done |
column
यह कुछ इस तरह प्रस्तुत करना चाहिए:
00 E '' 1A E $'\032' 34 - 4 4E - N 68 - h
01 E $'\001' 1B E $'\E' 35 - 5 4F - O 69 - i
02 E $'\002' 1C E $'\034' 36 - 6 50 - P 6A - j
03 E $'\003' 1D E $'\035' 37 - 7 51 - Q 6B - k
04 E $'\004' 1E E $'\036' 38 - 8 52 - R 6C - l
05 E $'\005' 1F E $'\037' 39 - 9 53 - S 6D - m
06 E $'\006' 20 E \ 3A - : 54 - T 6E - n
07 E $'\a' 21 E \! 3B E \; 55 - U 6F - o
08 E $'\b' 22 E \" 3C E \< 56 - V 70 - p
09 E $'\t' 23 E \# 3D - = 57 - W 71 - q
0A E $'\n' 24 E \$ 3E E \> 58 - X 72 - r
0B E $'\v' 25 - % 3F E \? 59 - Y 73 - s
0C E $'\f' 26 E \& 40 - @ 5A - Z 74 - t
0D E $'\r' 27 E \' 41 - A 5B E \[ 75 - u
0E E $'\016' 28 E \( 42 - B 5C E \\ 76 - v
0F E $'\017' 29 E \) 43 - C 5D E \] 77 - w
10 E $'\020' 2A E \* 44 - D 5E E \^ 78 - x
11 E $'\021' 2B - + 45 - E 5F - _ 79 - y
12 E $'\022' 2C E \, 46 - F 60 E \` 7A - z
13 E $'\023' 2D - - 47 - G 61 - a 7B E \{
14 E $'\024' 2E - . 48 - H 62 - b 7C E \|
15 E $'\025' 2F - / 49 - I 63 - c 7D E \}
16 E $'\026' 30 - 0 4A - J 64 - d 7E E \~
17 E $'\027' 31 - 1 4B - K 65 - e 7F E $'\177'
18 E $'\030' 32 - 2 4C - L 66 - f
19 E $'\031' 33 - 3 4D - M 67 - g
जहां पहला क्षेत्र बाइट का हेक्सा मूल्य है, तो दूसरे में Eचरित्र को बचाये जाने की आवश्यकता है और तीसरे क्षेत्र में चरित्र की प्रस्तुति से बच जाता है।
क्यों ,?
आप कुछ ऐसे पात्र देख सकते हैं जिन्हें हमेशा भागने की जरूरत नहीं है , जैसे ,, }और {।
तो हमेशा नहीं लेकिन कभी-कभी :
echo test 1, 2, 3 and 4,5.
test 1, 2, 3 and 4,5.
या
echo test { 1, 2, 3 }
test { 1, 2, 3 }
लेकिन देखभाल:
echo test{1,2,3}
test1 test2 test3
echo test\ {1,2,3}
test 1 test 2 test 3
echo test\ {\ 1,\ 2,\ 3\ }
test 1 test 2 test 3
echo test\ {\ 1\,\ 2,\ 3\ }
test 1, 2 test 3