zoukankan      html  css  js  c++  java
  • 变量定义及变量输出

    
    

    单引号、双引号、反引号与不加引号的说明
    单引号:所见即所得,即输出时会将单引号内的所有內容都原样输出,或者描述为单引号里面看到的是什么就会输出什么,这称为强引用。
    双引号 (默认):输出双引号内的所有内容;如果内容中有命令(要反引下)、变量、特殊转义符等,会先把变量、命令、转义字符解析出结果,然后再输出最终内容,推荐使用,这称为弱引用。
    无引号:赋值时,如果变量内容中有空格,则会造成赋值不完整。而在输出内容时,会将含有空格的字符串视为一个整体来输出;如果内容中有命令(要反引下)、变量等,则会先把变量、命令解析出结果,然后输出最终内容;如果字符串中带有空格等特殊字符,则有可能无法完整地输出,因此需要双引号替代无引号的情况,特别是对变量赋值时改加双引号。一般连续的字符串、数字、路径等可以不加任何引号进行赋值和输出,不过最好是用双引号替代无引号的情况,特别是对变量赋值时。
    反引号:一般用于引用命令,执行的时候命令会被执行,相当于S0,赋值和输出都要用“将命令引起来。

    对由反引号引起来的 `date`或 $(date)进行测试:
    [root@testdb ~]# echo 'today is date'
    today is date
    [root@testdb ~]# echo 'today is `date`'
    today is `date`
    [root@testdb ~]# echo "today is date"
    today is date
    [root@testdb ~]# echo "today is `date`"
    today is Tue Apr 9 14:15:17 CST 2019
    [root@testdb ~]# echo today is $(date)
    today is Tue Apr 9 14:15:41 CST 2019

    变量定义后,在调用变量输出打印时加引号测试
    [root@testdb ~]# LIANG=testchars
    [root@testdb ~]# echo $LIANG
    testchars
    [root@testdb ~]# echo '$LIANG'
    $LIANG
    [root@testdb ~]# echo "$LIANG"
    testchars

    grep过滤字符串时给过滤的内容加引号
    [root@testdb ~]# LIANG=testchars
    [root@testdb ~]# grep "$LIANG" grep.log
    testchars
    [root@testdb ~]# grep '$LIANG' grep.log
    [root@testdb ~]# grep $LIANG grep.log
    testchars

    sed过滤字符串时给过滤的内容加引号
    [root@testdb ~]# cat sed.log
    testchars
    liang
    [root@testdb ~]# LIANG=testchars
    [root@testdb ~]# sed -n /"$LIANG"/p sed.log
    testchars
    [root@testdb ~]# sed -n /'$LIANG'/p sed.log
    [root@testdb ~]# sed -n /$LIANG/p sed.log
    testchars

    sed和grep的测试是一致的,唯有awk有点特殊。
    awk变量总结:不管变量如何定义、赋值,除了加单引号以以外,利用awk直接获取变量的输出,结果都是一样的。
    awk加单引号后再同时加双引号,总能正确输出。
    因此,awk取用shell变量应该先用echo 加符号输出变量,然后通过管道给awk,进而控制变量的输出结果。
    使用awk调用shell中的变量,分别针对加引号、不加引号等情况进行测试:
    [root@testdb ~]# ETT=123
    [root@testdb ~]# awk 'BEGIN {print "$ETT"}'
    $ETT
    [root@testdb ~]# awk 'BEGIN {print $ETT}'

    [root@testdb ~]# awk 'BEGIN {print '$ETT'}'
    123
    [root@testdb ~]# awk 'BEGIN {print "'$ETT'"}'
    123

    [root@testdb ~]# ETT='test'
    [root@testdb ~]# awk 'BEGIN {print "$ETT"}'
    $ETT
    [root@testdb ~]# awk 'BEGIN {print $ETT}'

    [root@testdb ~]# awk 'BEGIN {print '$ETT'}'

    [root@testdb ~]# awk 'BEGIN {print "'$ETT'"}'
    test

    [root@testdb ~]# ETT="testtest"
    [root@testdb ~]# awk 'BEGIN {print "$ETT"}'
    $ETT
    [root@testdb ~]# awk 'BEGIN {print $ETT}'

    [root@testdb ~]# awk 'BEGIN {print '$ETT'}'

    [root@testdb ~]# awk 'BEGIN {print "'$ETT'"}'
    testtest

    [root@testdb ~]# ETT=`pwd`
    [root@testdb ~]# awk 'BEGIN {print "$ETT"}'
    $ETT
    [root@testdb ~]# awk 'BEGIN {print $ETT}'

    [root@testdb ~]# awk 'BEGIN {print '$ETT'}'
    awk: cmd. line:1: BEGIN {print /root}
    awk: cmd. line:1: ^ unterminated regexp
    awk: cmd. line:1: BEGIN {print /root}
    awk: cmd. line:1: ^ unexpected newline or end of string
    [root@testdb ~]# awk 'BEGIN {print "'$ETT'"}'
    /root

    [root@testdb ~]# ETT="testdb"
    [root@testdb ~]# echo "$ETT"|awk '{print $0}'
    testdb
    [root@testdb ~]# echo '$ETT'|awk '{print $0}'
    $ETT
    [root@testdb ~]# echo $ETT |awk '{print $0}'
    testdb

    [root@testdb ~]# ETT=`pwd`
    [root@testdb ~]# echo "$ETT"|awk '{print $0}'
    /root
    [root@testdb ~]# echo '$ETT'|awk '{print $0}'
    $ETT
    [root@testdb ~]# echo $ETT |awk '{print $0}'
    /root



  • 相关阅读:
    [整机笔记][转贴]硬盘无法双击打开的解决办法
    [网络随摘][转载]值得用一生回味的经典语录
    [网络随摘][转载]如果你已经过了20还不到25岁
    [网络随摘][转摘]只有十句话,我却看了十分钟
    实现百台手机异步并发定时自动GPS定位打卡,基于python全天后定时签到稳定版。
    【FireFox】在Firefox中,关于隐藏table中某一行tr,其他td的边框显示异常
    【记】屏蔽浏览器shift+鼠标滚轴事件
    【记】Javascript的函数直接量定义
    【Javascript】Javascript中的函数调用模式
    【记】three.js的一个简单的代码记录
  • 原文地址:https://www.cnblogs.com/l10n/p/12610882.html
Copyright © 2011-2022 走看看