为什么 zenity 颜色选择管道到 sed 会破坏代码?
Why zenity color selection piping to sed breaks the code?
我正在尝试使用 sed 将从 zenity 的 --color-selection 对话返回的 12 位十六进制代码转换为 6 位十六进制代码。例如:#dfe251a951a9 到 #df5151。
但是一旦我在下面的代码中使用 sed 它就会破坏整个脚本,并且当我 select "select" 或 "cancel" 按钮时我没有得到相应的回声!有什么问题吗?
在使用 sed 之前:一切正常,但我得到 12 位十六进制代码。
#!/bin/bash
color=$(zenity --color-selection)
if [[ $? == 0 ]]
then
echo "You selected $color."
else [[ $? == 1 ]]
echo "No color selected."
fi
使用 sed 后:当我点击 select 按钮时,我得到 6 位十六进制代码,但是当我点击取消时,我没有得到 "no color selected",它回显 "You selected ."
#!/bin/bash
color=$(zenity --color-selection | sed 's/\(#\?..\)..//g')
if [[ $? == 0 ]]
then
echo "You selected $color."
else [[ $? == 1 ]]
echo "No color selected."
fi
之后
color=$(zenity --color-selection | sed 's/\(#\?..\)..//g')
$?
是 sed
(不是 zenity
)1 的退出状态,即 0。您可以使用
#!/bin/bash
color=$(zenity --color-selection)
# Now $? is the exit status of zenity
if [[ $? == 0 ]]
then
# Process with sed only if necessary.
color=$(echo "$color" | sed 's/\(#\?..\)..//g')
echo "You selected $color"
else
echo "No color selected."
fi
注意,顺便说一下,我的 zenity
(3.16.2) 版本不是 return 十六进制代码,而是某种形式rgb(12,34,56)
。我没有调查这种变化发生的时间或原因,但依赖特定格式可能并不明智。
1 更准确地说:它是由 $()
生成的子 shell 的退出状态,它只是将最后一个命令的退出状态转发给它 运行 : sed
电话。
我正在尝试使用 sed 将从 zenity 的 --color-selection 对话返回的 12 位十六进制代码转换为 6 位十六进制代码。例如:#dfe251a951a9 到 #df5151。 但是一旦我在下面的代码中使用 sed 它就会破坏整个脚本,并且当我 select "select" 或 "cancel" 按钮时我没有得到相应的回声!有什么问题吗?
在使用 sed 之前:一切正常,但我得到 12 位十六进制代码。
#!/bin/bash
color=$(zenity --color-selection)
if [[ $? == 0 ]]
then
echo "You selected $color."
else [[ $? == 1 ]]
echo "No color selected."
fi
使用 sed 后:当我点击 select 按钮时,我得到 6 位十六进制代码,但是当我点击取消时,我没有得到 "no color selected",它回显 "You selected ."
#!/bin/bash
color=$(zenity --color-selection | sed 's/\(#\?..\)..//g')
if [[ $? == 0 ]]
then
echo "You selected $color."
else [[ $? == 1 ]]
echo "No color selected."
fi
之后
color=$(zenity --color-selection | sed 's/\(#\?..\)..//g')
$?
是 sed
(不是 zenity
)1 的退出状态,即 0。您可以使用
#!/bin/bash
color=$(zenity --color-selection)
# Now $? is the exit status of zenity
if [[ $? == 0 ]]
then
# Process with sed only if necessary.
color=$(echo "$color" | sed 's/\(#\?..\)..//g')
echo "You selected $color"
else
echo "No color selected."
fi
注意,顺便说一下,我的 zenity
(3.16.2) 版本不是 return 十六进制代码,而是某种形式rgb(12,34,56)
。我没有调查这种变化发生的时间或原因,但依赖特定格式可能并不明智。
1 更准确地说:它是由 $()
生成的子 shell 的退出状态,它只是将最后一个命令的退出状态转发给它 运行 : sed
电话。