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

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

如何在bash中轉義通配符/星號字符?

如何在bash中轉義通配符/星號字符?

如何在bash中轉義通配符/星號字符?例如。me$ FOO="BAR * BAR"me$ echo $FOO BAR file1 file2 file3 file4 BAR并使用“\”轉義字符:me$ FOO="BAR \* BAR"me$ echo $FOO BAR \* BAR我顯然做了一些愚蠢的事。如何獲得輸出“BAR * BAR”?
查看完整描述

3 回答

?
江戶川亂折騰

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

設置$ FOO時引用是不夠的。您還需要引用變量引用:


me$ FOO="BAR * BAR"

me$ echo "$FOO"

BAR * BAR


查看完整回答
反對 回復 2019-08-27
?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

我將為這個舊線程添加一些內容。


通常你會用


$ echo "$FOO"

但是,即使使用這種語法,我也遇到了問題。請考慮以下腳本。


#!/bin/bash

curl_opts="-s --noproxy * -O"

curl $curl_opts "$1"

在*需要傳遞逐字到curl,但也會出現同樣的問題。上面的例子不起作用(它將擴展到當前目錄中的文件名),也不會\*。您也無法引用,$curl_opts因為它將被識別為單個(無效)選項curl。


curl: option -s --noproxy * -O: is unknown

curl: try 'curl --help' or 'curl --manual' for more information

因此,如果應用于全局模式,我建議使用該bash變量$GLOBIGNORE來完全防止文件名擴展,或者使用set -f內置標志。


#!/bin/bash

GLOBIGNORE="*"

curl_opts="-s --noproxy * -O"

curl $curl_opts "$1"  ## no filename expansion

應用于您的原始示例:


me$ FOO="BAR * BAR"


me$ echo $FOO

BAR file1 file2 file3 file4 BAR


me$ set -f

me$ echo $FOO

BAR * BAR


me$ set +f

me$ GLOBIGNORE=*

me$ echo $FOO

BAR * BAR


查看完整回答
反對 回復 2019-08-27
  • 3 回答
  • 0 關注
  • 1192 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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