Shell 为什么zenity颜色选择管道到sed会破坏代码?
我正在尝试使用sed将zenity的——颜色选择对话框返回的12位十六进制代码转换为6位十六进制代码。例如:#dfe251a951a9到#df5151。 但是,一旦我在下面的代码中使用sed,它就会破坏整个脚本,当我选择“选择”或“取消”按钮时,我不会得到相应的回音!有什么问题吗 在使用sed之前:一切都很好,但我得到了12位十六进制代码 使用sed后:当我点击选择按钮时,我得到6位十六进制代码,但当我点击取消按钮时,我没有得到“未选择颜色”,它会回显“您已选择” 之后Shell 为什么zenity颜色选择管道到sed会破坏代码?,shell,sed,scripting,hex,zenity,Shell,Sed,Scripting,Hex,Zenity,我正在尝试使用sed将zenity的——颜色选择对话框返回的12位十六进制代码转换为6位十六进制代码。例如:#dfe251a951a9到#df5151。 但是,一旦我在下面的代码中使用sed,它就会破坏整个脚本,当我选择“选择”或“取消”按钮时,我不会得到相应的回音!有什么问题吗 在使用sed之前:一切都很好,但我得到了12位十六进制代码 使用sed后:当我点击选择按钮时,我得到6位十六进制代码,但当我点击取消按钮时,我没有得到“未选择颜色”,它会回显“您已选择” 之后 $?是sed(非zeni
$?
是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/\(#\?..\)../\1/g')
echo "You selected $color"
else
echo "No color selected."
fi
注意,顺便说一下,我的zenity
(3.16.2)版本不返回十六进制代码,而是返回某种形式的rgb(12,34,56)
。我没有调查这一变化发生的时间或原因,但依赖特定的格式可能并不明智
1更准确地说:它是由$()
生成的子shell的退出状态,它只是转发它运行的最后一个命令的退出状态:sed调用。之后
$?
是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/\(#\?..\)../\1/g')
echo "You selected $color"
else
echo "No color selected."
fi
注意,顺便说一下,我的zenity
(3.16.2)版本不返回十六进制代码,而是返回某种形式的rgb(12,34,56)
。我没有调查这一变化发生的时间或原因,但依赖特定的格式可能并不明智
1更准确地说:它是由$()
生成的子shell的退出状态,它只是转发它运行的最后一个命令的退出状态:sed调用。之后
$?
是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/\(#\?..\)../\1/g')
echo "You selected $color"
else
echo "No color selected."
fi
注意,顺便说一下,我的zenity
(3.16.2)版本不返回十六进制代码,而是返回某种形式的rgb(12,34,56)
。我没有调查这一变化发生的时间或原因,但依赖特定的格式可能并不明智
1更准确地说:它是由$()
生成的子shell的退出状态,它只是转发它运行的最后一个命令的退出状态:sed调用。之后
$?
是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/\(#\?..\)../\1/g')
echo "You selected $color"
else
echo "No color selected."
fi
注意,顺便说一下,我的zenity
(3.16.2)版本不返回十六进制代码,而是返回某种形式的rgb(12,34,56)
。我没有调查这一变化发生的时间或原因,但依赖特定的格式可能并不明智
1更准确地说:它是由
$()
生成的子shell的退出状态,它只是转发它运行的最后一个命令的退出状态:sed
调用。是的,工作正常。谢谢刚刚接触shell脚本,但是你的技巧可以完成这项工作。6位十六进制和你们rgb都很熟悉,有很多东西需要转换,但12位有点奇怪,我想很多人都不适合这种颜色格式;)是的,很好用。谢谢刚刚接触shell脚本,但是你的技巧可以完成这项工作。6位十六进制和你们rgb都很熟悉,有很多东西需要转换,但12位有点奇怪,我想很多人都不适合这种颜色格式;)是的,很好用。谢谢刚刚接触shell脚本,但是你的技巧可以完成这项工作。6位十六进制和你们rgb都很熟悉,有很多东西需要转换,但12位有点奇怪,我想很多人都不适合这种颜色格式;)是的,很好用。谢谢刚刚接触shell脚本,但是你的技巧可以完成这项工作。6位十六进制和你们rgb都很熟悉,有很多东西需要转换,但12位有点奇怪,我想很多人都不适合这种颜色格式;)