Bash
為什麼忽略命令前的變數賦值?
bash 4.1 聯機幫助頁狀態*(已添加重點)* …
簡單命令
一個簡單的命令是一系列可選的變數賦值,後跟空格分隔的單詞和重定向,並由控制操作符終止。第一個字指定要執行的命令,並作為參數零傳遞。剩餘的單詞作為參數傳遞給呼叫的命令。
驗證我係統上的版本*(未針對 shellshock 進行修補)* …
# bash --version GNU bash, version 4.1.0(1)-release (i686-pc-linux-gnu) ...
但是,沒有分號的前面的變數分配應該是一種僅在該命令呼叫的生命週期內本地化環境變數值的方法,但似乎並不…
# x=123 echo $x; unset x; echo $x bash: x: unbound variable # x=123; echo $x; unset x; echo $x 123 bash: x: unbound variable # x=123; echo $x | tr '1' 'a'; unset x; echo $x a23 bash: x: unbound variable # x=123 echo $x | tr '1' 'a'; unset x; echo $x bash: x: unbound variable bash: x: unbound variable # x="123" echo "$x" | tr '1' 'a'; unset x; echo $x bash: x: unbound variable bash: x: unbound variable # x="123"; echo "$x" | tr '1' 'a'; unset x; echo $x a23 bash: x: unbound variable
解決方案
根據另一個問題的這個答案,該命令似乎必須故意使用其父級的環境變數,而
echo
不是。但是 shell 呼叫就像bash -c
…x=123 bash -c 'echo $x'; unset x; echo $x 123 bash: x: unbound variable
資源
這條線
x=123 echo $x
按以下順序評估:
$x``x
在目前shell中擴展為 的值。x
在要執行的命令的環境中的值設置為123- 擴展命令行搜尋命令,並
echo
找到。echo``x
在設置為 123的環境中執行,並$1
設置為步驟 1 中的任何值x
。echo
輸出$1
到標準輸出,否則忽略其環境中的其他值。請注意,作為參數與命令之前的
$x
參數是分開的。x