Bash。传递包含空格的变量
Bash. Passing a variable containing spaces
我在 linux 上使用 dmenu 列表选择工具。假设我的典型调用是这样的:
ls | dmenu $DMENU_OPTIONS
来自 .dmenurc 的设置:
DMENU_FN="Liberation:size=16"
DMENU_OPTIONS="<...> -fn $DMENU_FN"
然后,我使用了一些基于dmenu 的快速启动脚本。这行需要 dmenu 选项:
dmenu_cmd="dmenu $DMENU_OPTIONS"
现在,我将字体名称切换为 Liberation Mono,字体片段现在被识别为一个选项的两个参数。 Dmenu 出现语法错误。我无法使用引号或反斜杠来解决这个问题。
所以有一个带有空格键的变量应该传递给另一个变量。
如果像下面的示例那样从其他参数中拆分字体名称并使用双引号,它将起作用:
DMENU_FONT="Dejavu Sans Mono:medium:size=18"
DMENU_OPTS="-nb #191919 -nf #FF0000 -sb #FF9318 -sf #191919"
ls | dmenu -fn "$DMENU_FONT" $DMENU_OPTS
请注意 DMENU_FONT
在双引号内,而 DMENU_OPTS
不是,因为目标是将字体名称作为单个值返回,而第二个变量作为多个参数返回。
希望对您有所帮助。
我为此使用的解决方法是使用 fontconfig 为 Liberation Mono 字体创建 LiberMono 别名。只需添加这样的文件:
~/.config/fontconfig/fonts.conf
<!-- Insert joke here -->
<match>
<test name="family"><string>LiberMono</string></test>
<edit name="family" mode="assign" binding="strong">
<string>Liberation Mono</string>
</edit>
</match>
我在 linux 上使用 dmenu 列表选择工具。假设我的典型调用是这样的:
ls | dmenu $DMENU_OPTIONS
来自 .dmenurc 的设置:
DMENU_FN="Liberation:size=16"
DMENU_OPTIONS="<...> -fn $DMENU_FN"
然后,我使用了一些基于dmenu 的快速启动脚本。这行需要 dmenu 选项:
dmenu_cmd="dmenu $DMENU_OPTIONS"
现在,我将字体名称切换为 Liberation Mono,字体片段现在被识别为一个选项的两个参数。 Dmenu 出现语法错误。我无法使用引号或反斜杠来解决这个问题。 所以有一个带有空格键的变量应该传递给另一个变量。
如果像下面的示例那样从其他参数中拆分字体名称并使用双引号,它将起作用:
DMENU_FONT="Dejavu Sans Mono:medium:size=18"
DMENU_OPTS="-nb #191919 -nf #FF0000 -sb #FF9318 -sf #191919"
ls | dmenu -fn "$DMENU_FONT" $DMENU_OPTS
请注意 DMENU_FONT
在双引号内,而 DMENU_OPTS
不是,因为目标是将字体名称作为单个值返回,而第二个变量作为多个参数返回。
希望对您有所帮助。
我为此使用的解决方法是使用 fontconfig 为 Liberation Mono 字体创建 LiberMono 别名。只需添加这样的文件:
~/.config/fontconfig/fonts.conf
<!-- Insert joke here -->
<match>
<test name="family"><string>LiberMono</string></test>
<edit name="family" mode="assign" binding="strong">
<string>Liberation Mono</string>
</edit>
</match>