以连字符开头的字符串在whiptail中报错,如何不修改原字符串解决?
解决whiptail识别以
-开头字符串为选项的问题 问题原因
whiptail会将以-开头的参数解析为命令行选项,当你的字符串"-|foo\n"作为--msgbox的内容参数传入时,它被误识别为一个未知选项,从而抛出-|foo\n: unknown option的错误。
不修改原字符串的解决方案
有两种可靠的方法可以规避这个问题:
方法1:使用--终止选项解析
在传递$str之前加上--,这是大多数命令行工具的标准用法,用来明确告知工具后续的内容均为普通参数,不再解析为选项:
#!/bin/bash str="-|foo\n" whiptail --title "test" --msgbox -- "$str" 20 78
方法2:通过标准输入传递内容
利用whiptail支持从标准输入读取消息内容的特性(用-作为内容参数),结合printf处理转义字符后传入:
#!/bin/bash str="-|foo\n" printf "%b" "$str" | whiptail --title "test" --msgbox - 20 78
注:printf "%b"会正确解析字符串中的\n转义字符,确保换行符生效。
内容的提问来源于stack exchange,提问作者Logan Lee
相关产品推荐
相关产品推荐

