在bash字符串中存储文字通配符
假设我有一个函数在bash字符串中存储文字通配符,bash,variables,escaping,quoting,metacharacters,Bash,Variables,Escaping,Quoting,Metacharacters,假设我有一个函数 print_args () { for i in $@; do echo "$i" done } 当我这样做的时候 foo='\*' print_args $foo 我明白了 \* (带反斜杠)作为输出 如果我将foo的定义改为foo='*',则在运行print_args$foo时,我会获取当前目录中的所有文件 因此,我要么包含反斜杠,要么解释*,但我不知道如何从字面上理解* 无论我是否在$foo周围包含双引号,输出都是相同的。一般规则是引
print_args () {
for i in $@; do
echo "$i"
done
}
当我这样做的时候
foo='\*'
print_args $foo
我明白了
\*
(带反斜杠)作为输出
如果我将foo
的定义改为foo='*'
,则在运行print_args$foo
时,我会获取当前目录中的所有文件
因此,我要么包含反斜杠,要么解释*
,但我不知道如何从字面上理解*
无论我是否在
$foo
周围包含双引号,输出都是相同的。一般规则是引用所有变量。它可以防止外壳在空间上展开和拆分。因此,您的函数应该如下所示(引用$@
,以及${array[@]}
按参数拆分):
这样称呼它:
print_args "$foo"
引用扩展名
$foo
print_args“$foo”
@Etan抱歉,我在你完成评论之前编辑了。它是否具有相同的双引号。哦,您还需要在扩展名$@
周围加引号<代码>用于“$@”中的i。一般规则:“总是引用变量展开式。”啊,就是这样。我认为$@
在这方面很特别,但我想我是记错了。
print_args "$foo"