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

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

為什么此bash函數僅打印整個字符串的第一個單詞?

為什么此bash函數僅打印整個字符串的第一個單詞?

收到一只叮咚 2021-04-11 08:58:57
我正在嘗試創建函數,該函數將以某種顏色打印綁定到變量的消息。消息變量作為此函數的參數傳遞。問題是我只得到第一個空格之前的文本(只有消息的第一個單詞)。我的腳本如下所示:#!/usr/bashlbGREEN='\e[1;92m'NC='\e[0m'normalMessage="Everything fine"echo_message() {    echo -e  ${lbGREEN}$1${NC}}echo_message $normalMessage 我的輸出是:Everything
查看完整描述

3 回答

?
慕斯709654

TA貢獻1840條經驗 獲得超5個贊

對我來說,我不得不更改“#!/ bin / bash”的標題,但是顯然這對您來說不是問題。


在回顯中,僅打印帶有$ 1的第一個單詞,如果將其更改為$ 2,則將打印第二個單詞(參數),依此類推。


您可以在引號內傳遞名稱,也可以使用$ @打印所有參數。


解決方案1(帶有$ @):


lbGREEN='\e[1;92m'

NC='\e[0m'

normalMessage="Everything fine"

echo_message() {

    echo -e  ${lbGREEN}$@${NC}

}

echo_message $normalMessage

解決方案2(帶引號):


lbGREEN='\e[1;92m'

NC='\e[0m'

normalMessage="Everything fine"

echo_message() {

    echo -e  ${lbGREEN}$1${NC}

}

echo_message "$normalMessage"


查看完整回答
反對 回復 2021-04-16
?
手掌心

TA貢獻1942條經驗 獲得超3個贊

您引用的報價有誤。

如果要模擬的行為echo,您的函數應接受多個參數,并全部打印出來。目前,它僅評估第一個參數,因此建議$*改用。您還需要將參數括在雙引號中以保護任何特殊字符:

echo_message() {    echo -e  "${lbGREEN}$*${NC}"}

特殊變量$*將擴展到所有參數,并用空格(或更準確地說,是$ IFS的第一個字符,通常是空格字符)分隔。請注意,您幾乎總是想要"$@"而不是"$*",這是少數情況也是正確的,盡管如果IFS將其設置為非標準值,其語義稍有不同。

現在,該函數支持多個參數,并以綠色打印所有參數,并用空格分隔。但是,我建議您在調用函數時也引用該參數:

echo_message "$normalMessage"

盡管$normalMessage現在可以正確處理其中的空格,但其他特殊字符(如)!仍需要加引號。


查看完整回答
反對 回復 2021-04-16
  • 3 回答
  • 0 關注
  • 364 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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