簡體   English   中英

Shell腳本中的內聯變量

[英]Inline variable in shell script

根據我的要求之一,我想在腳本開始處創建命令,並希望稍后填充這些變量。 例如:

# Global
Mylistdir="ls -la $MYDAIR"

#now after some code  I want to create this variable
MYDAIR="/data/dir/"
#Now like to run taht command on /data/dir
echo "$Mylistdir"

我該怎么做?

我嘗試了

Mylistdir="ls -la `$MYDAIR`"`

但是沒有用

代碼應存儲在函數中,而不是變量中。 請參閱BashFAQ#50 ,以獲取基本原理的完整描述,以及由於忽略此規則而導致的錯誤。

Mylistdir() { ls -la "$MYDAIR"; }
MYDAIR=/data/dir
Mylistdir

如果絕對必須將代碼存儲在變量中,請使用eval

Mylistdir='ls -la "$MYDAIR"'
MYDAIR=/data/dir
eval "$Mylistdir"

...但是請注意BashFAQ#48中的警告。


問題中提出的原始代碼編寫如下:

Mylistdir="ls -la `$MYDAIR`"`

...現在,由於以下幾個原因,它被打破了:

  • 它在外部使用雙引號,導致任何擴展都將在分配時立即執行,而不是在以后的評估時執行。
  • 它將反引號放在$MYDAIR周圍,​​導致該變量在賦值時的值被字符串拆分,glob擴展,然后作為命令運行,並替換了該命令的輸出(假定為空字符串)到位。
  • 它的末尾有一個尾隨的,無可比擬的反引號,使其成為無效語法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM