Shell 为什么zenity颜色选择管道到sed会破坏代码?

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的——颜色选择对话框返回的12位十六进制代码转换为6位十六进制代码。例如:#dfe251a951a9到#df5151。 但是,一旦我在下面的代码中使用sed,它就会破坏整个脚本,当我选择“选择”或“取消”按钮时,我不会得到相应的回音!有什么问题吗

在使用sed之前:一切都很好,但我得到了12位十六进制代码

使用sed后:当我点击选择按钮时,我得到6位十六进制代码,但当我点击取消按钮时,我没有得到“未选择颜色”,它会回显“您已选择”

之后

$?
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位有点奇怪,我想很多人都不适合这种颜色格式;)