網站首頁 編程語言 正文
1、變量定義
變量正確定義。
格式:變量名="變量值"
# 兩種方式都可以 [root@localhost ~]# name=zhenniubi [root@localhost ~]# name="zhen niubi"
變量名不能用數字開頭。
[root@localhost ~]# 2name="zhen niubi" -bash:2name=zhen niubi:command not found
等號左右兩側不能有空格。
[root@localhost ~]# name = "zhenniubi" -bash:name:command not found
變量的值如果有空格,必須用引號包含。
[root@localhost ~]# name=zhen niubi -bash:niubi:command not found
2、變量調用
調用變量用$
符號。
#定義變量name [root@localhost ~ ] # name="zhen niubi" #輸出變量name的值 [root@localhost ~ ] # echo $name zhen niubi
3、變量的修改
Shell中變量值的修改,是以覆蓋的形式完成的,以后最后一次對該變量的賦值為準。
#之前定義好的變量 [root@localhost ~]# name=ailin [root@localhost ~]# [root@localhost ~]# echo $name ailin #修改后的變量值 [root@localhost ~]# name=cangls [root@localhost ~]# [root@localhost ~]# echo $name cangls
4、查看變量
命令格式:
[root@localhost ~]# set [選項]
選項:
-u
:如果設定此選項,調用未聲明變量時會報錯(默認無任何提示)(很常用)。
-x
:如果設定此選項,在命令執行之前,會把命令先輸出一次。(不建議使用)
(1)-u選項說明:
在當前系統下從沒有定義過age
字段(變量),直接輸出age
變量的值,如下圖可以看到沒有任何值。
如果我給age
字段定義一個空值,在查看age
字段,如下圖,可以看到依舊沒有任何輸出。
那么綜上所述,查看一個變量時沒有任何輸出,是有兩種可能的。一種是age
變量不存在,一種是age
變量的值為空。在Java中,變量沒有被定義和變量值為空完全是兩個不同的概念,在Shell中也一樣,我們一定要對此進行區分。
如果我執行了set -u
命令,就可以對上面兩種情況進行區分。
#直接執行`set -u`命令 [root@localhost ~ ] # set -u #輸出一個未定義變量,顯示addr變量不存在。 [root@localhost ~]# echo $addr -bash: addr: unbound variable #給addr變量定義一個空值, #在查看變量,可以看到變量的值為空。 [root@localhost ~]# addr="" [root@localhost ~]# echo $addr [root@localhost ~]#
注意:在命令行中執行set -u
命令,這種方式是臨時生效的,需要永久生效,就需要寫入環境變量配置文件中。(如何配置,看以后的環境變量配置內容)
總結:當設置了-u
選項后,如果調用沒有設定的變量會有報錯。默認是沒有在何輸出的。
(2)-x選項說明:
就字面意思,如果設定了-x
選項,會在每個命令執行之前,先把命令輸出一次
[root@localhost ~ ] # set -x [root@localhost ~ ] # ls + ls --color=auto anaconda-ks.cfg install.log install.log.syslog sh tdir test testfile
如果不新登陸系統,會一直這樣,因為上面說了,在命令行中直接執行是臨時生效的。并不推薦執行此選項,命令結果看起來很亂。
(3)set命令說明:
直接使用set
命令,不加任何選項,會查詢系統中所有的變量,包含用戶自定義變量和環境變量。(其實是一部分)
系統的另一部分變量,用env
命令來查看。兩個命令看到的變量會有重疊,但是env
命令查看不到自定義變量的。(查了一下,網上介紹的也很模糊,就是兩個命令就能夠查到系統中全部的變量,set
多用于查看系統的用戶自定義變量,env
多用于查詢系統的環境變量。)
小結:
set
:用來顯示當前Shell的變量,包括當前用戶的變量。
每個Shell有自己特有的變量,這個和用戶變量是不同的,當前用戶變量和你用什么Shell無關,不管你用什么Shell,每個Shell都有自定義的Shell,也就是自己Shell的變量。這種變量不同Shell是不同的,這些變量只有set
才會顯示,是bash
特有的。這種變量也只對本Shell有效, 不能傳遞給子Shell。(就相當于Java中的局部變量)。
env
:用來顯示環境變量,也叫顯示當前用戶的變量,環境變量可傳遞給子Shell。(就相當于Java中的全局變量)
5、變量刪除
[root@localhost ~]# unset 變量名
不需要在變量名前加$
符號,只有在調用變量值的時候需要在變量名前加$
符號。
原文鏈接:https://www.cnblogs.com/liuyuelinfighting/p/16170883.html
相關推薦
- 2022-08-05 Entity?Framework主從表數據加載方式_C#教程
- 2022-06-14 Docker?配置容器固定IP的方法_docker
- 2022-12-07 C++?Boost?Bimap示例詳細講解_C 語言
- 2022-08-05 SpringBoot 2.X 整合Redis
- 2022-01-08 使用grid布局解決flex布局最后一行不足的問題
- 2022-12-10 關于torch中tensor數據類型的轉換_python
- 2022-06-15 C++詳細講解繼承與虛繼承實現_C 語言
- 2024-04-06 linux環境docker安裝redis(AOF和RDB持久化)
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支