![](/img/trans.png)
[英]how to pass the filename as variable to a awk command from a shell script
[英]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.