如何使用 IFS 删除 \r?
How to remove \r using IFS?
我正在编写如下代码片段:
while IFS=$': \r\t' read -r -u9 marker v; do
case $marker in
Release)
export RELEASE=$v
;;
esac
done 9< <(git show -s --format=%b)
但我看到 $v
仍然包含 \r
。从 https://bash.cyberciti.biz/guide/$IFS,我读到 A sequence of IFS whitespace characters is also treated as a delimiter.
我所做的不应该从行中删除尾随 \r
吗?
由于您正在格式化 git show
的输出,因此请在 git 格式字符串中使用 null
定界符 %x00
,这永远无法在 shell变量:
while IFS=$': \t' read -r -u9 marker v
do
case $marker in
Release)
export RELEASE="$v"
;;
esac
done 9< <( git show -s --format='%b%x00' )
您可以这样更改 read
:
read -r -u9 marker v possibly_something_else;
这样 $v 就不会包含 \r
我使用 tr
删除尾随 \r
。这是我的最终解决方案:
while IFS=$': \r\t' read -r -u9 marker v; do
case $marker in
Release)
export RELEASE=$(echo $v | tr -d '\r\t')
;;
esac
done 9< <(git show -s --format=%b)
我正在编写如下代码片段:
while IFS=$': \r\t' read -r -u9 marker v; do
case $marker in
Release)
export RELEASE=$v
;;
esac
done 9< <(git show -s --format=%b)
但我看到 $v
仍然包含 \r
。从 https://bash.cyberciti.biz/guide/$IFS,我读到 A sequence of IFS whitespace characters is also treated as a delimiter.
我所做的不应该从行中删除尾随 \r
吗?
由于您正在格式化 git show
的输出,因此请在 git 格式字符串中使用 null
定界符 %x00
,这永远无法在 shell变量:
while IFS=$': \t' read -r -u9 marker v
do
case $marker in
Release)
export RELEASE="$v"
;;
esac
done 9< <( git show -s --format='%b%x00' )
您可以这样更改 read
:
read -r -u9 marker v possibly_something_else;
这样 $v 就不会包含 \r
我使用 tr
删除尾随 \r
。这是我的最终解决方案:
while IFS=$': \r\t' read -r -u9 marker v; do
case $marker in
Release)
export RELEASE=$(echo $v | tr -d '\r\t')
;;
esac
done 9< <(git show -s --format=%b)