这在 BASH 中效果很好:
$ where=/sys/class/backlight/*
$ echo $where
/sys/class/backlight/intel_backlight
然而,当将 POSIX 脚本作为解释器放入时/bin/sh
,这不起作用,where
变成了/sys/class/backlight/*
.
我尝试过谷歌,但可能我没有使用正确的术语。
答案1
变量的值where
始终是字符串/sys/class/backlight/*
。一般来说,在语法需要单个单词的上下文中,例如标量赋值的右侧,没有通配符扩展。在语法需要单词列表(例如命令及其参数或数组赋值的右侧)的上下文中,存在通配符扩展(以及单词分割)。看shell 变量的扩展以及 glob 和 split 对它的影响和什么时候需要双引号?更多细节。
$where
如果在列表上下文中使用通配符,则扩展通配符。据推测,在您的脚本中,您放入$where
了双引号(这使得整个内容成为一个单词)或在其他单词上下文中。
如果您的脚本是 bash(不是普通 sh)脚本,您可以创建where
一个数组:
where=(/sys/class/backlight/*)
然后您可以使用"${where[@]}"
背光设备的目录列表。奇怪的是, ksh$where
相当于${where[0]}
,即采用数组的第一个元素并忽略其余元素,因此如果您假设有一个设备,您可以继续$where
在单词上下文中使用。