⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unprotect_literal.sh

📁 BASH Shell 编程 经典教程 《高级SHELL脚本编程》中文版
💻 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 + -