linux shell 的變數問題 &&export 語句作用 &&su 與 su - 的區別

來源:互聯網
上載者:User

標籤:shell   bash   linux shell   

                                                      首先來看看變數的問題


[[email protected] ~]# dhh=1

[[email protected] ~]# echo $dhh
1

開一個子shell測試

[[email protected] ~]# bash

[[email protected] ~]# echo $dhh

沒有值

                 使用export方法

 [[email protected] ~]# exit      ----------退出子shell 
exit
[email protected] ~]# export dhh
[[email protected] ~]# bash    -----------建立子shell
[[email protected] ~]# echo $dhh
1

這樣我們就能說:export   能夠將本shell定義的變數傳遞給給子shell用

但是 子shell的變數能夠通過exprot講變數值傳遞給父shell嗎??

[[email protected] ~]# bash
[[email protected] ~]# dkk=1
[[email protected] ~]# export dkk
[[email protected] ~]# exit
exit
[[email protected] ~]# echo $dkk

沒有值

答案是:不行的。。。

要實現的話。。有下面幾個方法            來自  http://blog.csdn.net/dreamcoding/article/details/8519689

那麼子 shell 有什麼辦法可以向父 shell 傳遞自己的變數嗎?下面方法可以考慮:

  1. 通過一個中間檔案進行:

    #!/bin/bash( subvar="hello shell" echo "$subvar" > temp.txt)read pvar < temp.txtecho $pvar運行輸出:$ sh subandp.shhello shell
  2. 通過命令替換:

    #!/bin/bashpvar=`subvar="hello shell";echo $subvar`echo $pvar
運行輸出: ::
$ ./subandp.shhello shell

執行命令替換符(兩個反單引號)之間的命令也是在子 shell 來完成的。

  1. 使用具名管道:

    #!/bin/bashmkfifo -m 777 npipe(  subsend="hello world"  echo "$subsend" > npipe & )read pread < npipeecho "$pread"exit 0

運行輸出:

[email protected]:~/shell$ ./var.shhello world

關於有名管道建立命令 mkfifo 可參考:http://www.groad.net/bbs/read.php?tid-3707.html

  1. 使用 here 文檔:

    #!/bin/bashread pvar << HERE`subvar="hello shell"echo $subvar`HEREecho $pvar

運行輸出:

$ ./subandp.shhello shell

方法應該還有很多,這些方法的本質原理基於進程間的通訊。


                                                                             再來看看  su 與 su - 切換使用者的區別


su 方法

[[email protected] ~]# useradd test

[[email protected] ~]# test1=1

[[email protected] ~]# su test
[[email protected] root]$ echo $test1

沒有值

        然而使用export傳遞變數是可行的

[[email protected] ~]# export test=1

[[email protected] ~]# su test

[[email protected] root]$ echo $test
1

[[email protected] root]$ echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin -----環境變數與root的環境變數相同

再來看看  su -   方法

[[email protected] ~]# su - test
[[email protected] ~]$ echo $test

沒有值
[[email protected] ~]$ echo $test1
沒有值

[[email protected] ~]$ echo $PATH

/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/test/bin------------環境變數與root環境變數不同

 綜合所訴:



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.