【发布时间】:2015-12-09 12:57:54
【问题描述】:
我正在尝试为 android 创建一个 shell 脚本。
在此脚本中,我想在 xml 文件中编辑时间戳键
但时间戳变量总是留下换行符。
我正在使用来自 busybox 的 sed 和 tr 命令。 ":" 是分隔符
我在 tr 中尝试过 \r,\n 但没有用。
我的脚本代码:
current_time=$(date +%s | busybox tr -d '\r\n')
busybox sed -i "s:name=\"timeStamp3\" value=\"[0-9]*\":name=\"timeStamp3\" value=\"$current_time\":" ./cocos2dxprefsFile.xml
输入:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<int name="classic_ufg_b2" value="-10" />
<int name="timeStamp3" value="1441985760" />
<string name="lastName">Albert</string>
<int name="classic_ufg_s" value="262" />
</map>
预期输出:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<int name="classic_ufg_b2" value="-10" />
<int name="timeStamp3" value="**currenttime**" />
<string name="lastName">Albert</string>
<int name="classic_ufg_s" value="262" />
</map>
电流输出
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<int name="classic_ufg_b2" value="-10" />
<int name="timeStamp3" value="**currenttime**
" />
<string name="lastName">Albert</string>
<int name="classic_ufg_s" value="262" />
</map>
【问题讨论】:
-
这没有意义。
$()默认去掉换行符,你甚至不需要tr那里。尝试使用foo=$(echo bar); echo foobar | busybox sed "s/foo/$foo/"进行测试。这会返回barbar吗? -
@ThomasDickey 是的,我知道。我在busybox(包括
busybox sh)上试过这个,进程替换仍然会去除尾随空格。它可能归结为 OP 的 android 上的 busybox 版本,但即使$()没有修剪它,tr也应该。 -
您可以证明
tr是不需要的:busybox sh -c 'echo "--$(date +%s)--"'愉快地输出--1449159282--,没有杂散的换行符。无论我如何尝试,我都无法重现报告的问题。