簡體   English   中英

將變量從 shell 腳本傳遞到內聯 ruby​​ 命令?

[英]Pass variable from shell script into inline ruby command?

我希望能夠在 shell 腳本中聲明一個變量並在 ruby​​ 內聯命令中使用它。 像這樣的東西:

foo=kroe761
bar=$(ruby -e 'puts $foo')
echo My name is $bar

$ My name is kroe761.

但是,我得到的是My name is 如何將 shell 變量放入我的 ruby​​ 腳本中?

您的程序無法運行,因為命令行參數擴展不會發生在用撇號括起來的字符串中

您運行的 Ruby 代碼正是puts $foo並且,因為它的名稱以$開頭,對於 Ruby 代碼$foo是一個未初始化的全局變量。 Ruby 程序輸出一個空行,但換行符被$()修剪,並且存儲在 shell 變量bar的最終值是一個空字符串。

如果您嘗試ruby -e "puts $foo" (因為參數在雙引號之間展開),您會發現它也不會產生您想要的結果,但更重要的是,它會引發錯誤。 它執行的 Ruby 代碼是puts kroe761並拋出,因為kroe761是一個未知的局部變量或方法名稱。
以這種方式在命令行中構建 Ruby 程序並不是正確的方法(而且正確地執行它並不像看起來那么容易)。

我建議您在命令行中將$foo的值作為參數傳遞給腳本,並在 Ruby 代碼中使用全局變量ARGV來檢索它。

foo=kroe761
bar=$(ruby -e 'puts ARGV[0]' "$foo")
echo "My name is $bar"

$foo放在引號之間非常重要,否則,如果它包含空格,則不會將其作為一個參數傳遞給ruby ,而是 shell 通過空格將其拆分為多個參數

上網查一下。

暫無
暫無

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

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