?? unprotect_literal.sh
字號:
#! /bin/bash# unprotect_literal.sh# set -vx:<<-'_UnProtect_Literal_String_Doc' Copyright (c) Michael S. Zick, 2003; All Rights Reserved License: Unrestricted reuse in any form, for any purpose. Warranty: None Revision: $ID$ Documentation redirected to the Bash no-operation. Bash will '/dev/null' this block when the script is first read. (Uncomment the above set command to see this action.) Remove the first (Sha-Bang) line when sourcing this as a library procedure. Also comment out the example use code in the two places where shown. Usage: Complement of the "$(_pls 'Literal String')" function. (See the protect_literal.sh example.) StringVar=$(_upls ProtectedSringVariable) Does: When used on the right-hand-side of an assignment statement; makes the substitions embedded in the protected string. Notes: The strange names (_*) are used to avoid trampling on the user's chosen names when this is sourced as a library._UnProtect_Literal_String_Doc_upls() { local IFS=$'x1B' # \ESC character (not required) eval echo $@ # Substitution on the glob.}# :<<-'_UnProtect_Literal_String_Test'# # # Remove the above "# " to disable this code. # # #_pls() { local IFS=$'x1B' # \ESC character (not required) echo $'\x27'$@$'\x27' # Hard quoted parameter glob}# Declare an array for test values.declare -a arrayZ# Assign elements with various types of quotes and escapes.arrayZ=( zero "$(_pls 'Hello ${Me}')" 'Hello ${You}' "\'Pass: ${pw}\'" )# Now make an assignment with that result.declare -a array2=( ${arrayZ[@]} )# Which yielded:# - - Test Three - -# Element 0: zero is: 4 long # Our marker element.# Element 1: Hello ${Me} is: 11 long # Intended result.# Element 2: Hello is: 5 long # ${You} expanded to nothing.# Element 3: 'Pass: is: 6 long # Split on the whitespace.# Element 4: ' is: 1 long # The end quote is here now.# set -vx# Initialize 'Me' to something for the embedded ${Me} substitution.# This needs to be done ONLY just prior to evaluating the#+ protected string.# (This is why it was protected to begin with.)Me="to the array guy."# Set a string variable destination to the result.newVar=$(_upls ${array2[1]})# Show what the contents are.echo $newVar# Do we really need a function to do this?newerVar=$(eval echo ${array2[1]})echo $newerVar# I guess not, but the _upls function gives us a place to hang#+ the documentation on.# This helps when we forget what a # construction like:#+ $(eval echo ... ) means.# What if Me isn't set when the protected string is evaluated?unset MenewestVar=$(_upls ${array2[1]})echo $newestVar# Just gone, no hints, no runs, no errors.# Why in the world?# Setting the contents of a string variable containing character#+ sequences that have a meaning in Bash is a general problem in#+ script programming.## This problem is now solved in eight lines of code#+ (and four pages of description).# Where is all this going?# Dynamic content Web pages as an array of Bash strings.# Content set per request by a Bash 'eval' command#+ on the stored page template.# Not intended to replace PHP, just an interesting thing to do.#### Don't have a webserver application?# No problem, check the example directory of the Bash source;#+ there is a Bash script for that also.# _UnProtect_Literal_String_Test# # # Remove the above "# " to disable this code. # # #exit 0
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -