为了账号安全,请及时绑定邮箱和手机立即绑定

如何在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 关注
  • 1113 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信