亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從Bash函數返回字符串值

如何從Bash函數返回字符串值

吃雞游戲 2019-11-21 14:30:24
我想從Bash函數返回一個字符串。我將用Java編寫示例以顯示我想做的事情:public String getSomeString() {  return "tadaa";}String variable = getSomeString();下面的示例在bash中有效,但是有更好的方法嗎?function getSomeString {   echo "tadaa"}VARIABLE=$(getSomeString)字符串 bash 函數的 返回值
查看完整描述

3 回答

?
繁花如伊

TA貢獻2012條經驗 獲得超12個贊

您可以讓函數將變量作為第一個arg,然后使用要返回的字符串修改變量。


#!/bin/bash

set -x

function pass_back_a_string() {

    eval "$1='foo bar rab oof'"

}


return_var=''

pass_back_a_string return_var

echo $return_var

打印“ foo bar rab oof”。


編輯:在適當的位置添加了引號,以允許字符串中的空格解決@Luca Borrione的評論。


編輯:作為演示,請參閱以下程序。這是一個通用的解決方案:它甚至允許您將字符串接收到局部變量中。


#!/bin/bash

set -x

function pass_back_a_string() {

    eval "$1='foo bar rab oof'"

}


return_var=''

pass_back_a_string return_var

echo $return_var


function call_a_string_func() {

     local lvar=''

     pass_back_a_string lvar

     echo "lvar='$lvar' locally"

}


call_a_string_func

echo "lvar='$lvar' globally"

打印:


+ return_var=

+ pass_back_a_string return_var

+ eval 'return_var='\''foo bar rab oof'\'''

++ return_var='foo bar rab oof'

+ echo foo bar rab oof

foo bar rab oof

+ call_a_string_func

+ local lvar=

+ pass_back_a_string lvar

+ eval 'lvar='\''foo bar rab oof'\'''

++ lvar='foo bar rab oof'

+ echo 'lvar='\''foo bar rab oof'\'' locally'

lvar='foo bar rab oof' locally

+ echo 'lvar='\'''\'' globally'

lvar='' globally

編輯:這表明原始變量的值是在功能可用,進行了錯誤@Xichen李在評論批評。


#!/bin/bash

set -x

function pass_back_a_string() {

    eval "echo in pass_back_a_string, original $1 is \$$1"

    eval "$1='foo bar rab oof'"

}


return_var='original return_var'

pass_back_a_string return_var

echo $return_var


function call_a_string_func() {

     local lvar='original lvar'

     pass_back_a_string lvar

     echo "lvar='$lvar' locally"

}


call_a_string_func

echo "lvar='$lvar' globally"

這給出了輸出:


+ return_var='original return_var'

+ pass_back_a_string return_var

+ eval 'echo in pass_back_a_string, original return_var is $return_var'

++ echo in pass_back_a_string, original return_var is original return_var

in pass_back_a_string, original return_var is original return_var

+ eval 'return_var='\''foo bar rab oof'\'''

++ return_var='foo bar rab oof'

+ echo foo bar rab oof

foo bar rab oof

+ call_a_string_func

+ local 'lvar=original lvar'

+ pass_back_a_string lvar

+ eval 'echo in pass_back_a_string, original lvar is $lvar'

++ echo in pass_back_a_string, original lvar is original lvar

in pass_back_a_string, original lvar is original lvar

+ eval 'lvar='\''foo bar rab oof'\'''

++ lvar='foo bar rab oof'

+ echo 'lvar='\''foo bar rab oof'\'' locally'

lvar='foo bar rab oof' locally

+ echo 'lvar='\'''\'' globally'

lvar='' globally


查看完整回答
反對 回復 2019-11-21
?
弒天下

TA貢獻1818條經驗 獲得超8個贊

上面的所有答案都忽略了bash手冊頁中所述的內容。


在函數內部聲明的所有變量將與調用環境共享。

所有聲明為local的變量將不會共享。

范例程式碼


#!/bin/bash


f()

{

    echo function starts

    local WillNotExists="It still does!"

    DoesNotExists="It still does!"

    echo function ends

}


echo $DoesNotExists #Should print empty line

echo $WillNotExists #Should print empty line

f                   #Call the function

echo $DoesNotExists #Should print It still does!

echo $WillNotExists #Should print empty line

并輸出


$ sh -x ./x.sh

+ echo


+ echo


+ f

+ echo function starts 

function starts

+ local 'WillNotExists=It still does!'

+ DoesNotExists='It still does!'

+ echo function ends 

function ends

+ echo It still 'does!' 

It still does!

+ echo

同樣在pdksh和ksh下,此腳本也可以實現!


查看完整回答
反對 回復 2019-11-21
?
波斯汪

TA貢獻1811條經驗 獲得超4個贊

我沒有更好的方法了。Bash僅知道狀態代碼(整數)和寫入標準輸出的字符串。


查看完整回答
反對 回復 2019-11-21
  • 3 回答
  • 0 關注
  • 732 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號