String 如何删除字符串末尾的换行符(\n)? 问题

String 如何删除字符串末尾的换行符(\n)? 问题,string,bash,replace,String,Bash,Replace,我在一个字符串中有多个属性行,由\n分隔,如下所示: LINES2="Abc1.def=$SOME_VAR\nAbc2.def=SOMETHING_ELSE\n"$LINES 行变量 可能包含一组未定义的字符 可能是空的。如果为空,我希望避免尾随的\n 我对任何命令行实用程序(sed、tr、awk等等)都是开放的 尝试 我试了这个也没用 sed -z 's/\\n$//g' <<< $LINES2 sed-z的/\\n$//g'这里有一个解决方案: LINES2="Ab

我在一个字符串中有多个属性行,由
\n
分隔,如下所示:

LINES2="Abc1.def=$SOME_VAR\nAbc2.def=SOMETHING_ELSE\n"$LINES
变量

  • 可能包含一组未定义的字符
  • 可能是空的。如果为空,我希望避免尾随的
    \n
我对任何命令行实用程序(sed、tr、awk等等)都是开放的

尝试 我试了这个也没用

sed -z 's/\\n$//g' <<< $LINES2
sed-z的/\\n$//g'这里有一个解决方案:

LINES2="Abc1.def=$SOME_VAR"$'\n'"Abc2.def=SOMETHING_ELSE${LINES:+$'\n'$LINES}"
语法
${name:+value}
表示“如果变量
name
存在且不为空,则插入
value
”。因此,在本例中,如果
$LINES
不为空,则插入一个新行,后跟
$LINES
,这似乎正是您想要的

我使用
$'\n'
是因为
“\n”
不是换行符。更具可读性的解决方案是定义一个shell变量,其值为单个换行符

在shell赋值语句中不必引用字符串,因为赋值的右侧不进行分词或全局展开。不引用将更容易插入
$'\n'

通常不建议对shell变量使用大写,因为shell和操作系统使用大写名称是为了它们自己的目的。局部变量通常应为小写名称

因此,如果我不是根据问题中的命令来回答,我会写:

lines2=Abc1.def=$someVar$'\n'Abc2.def=SOMETHING_ELSE${lines:+$'\n'$lines}

@avrilalejandro
tr
删除所有出现的搜索词。我只想删除上次出现的内容。
没有必要在shell赋值语句中引用字符串
,那你为什么要引用整个内容呢?@123:我在复制OP中的那行。你是什么意思,那行就是整个答案,你更改了其中的一部分,那么为什么要留下这些引语呢?@123:这可能是个坏习惯:尽量少做必要的改动,以便把注意力集中在事实上是答案的那部分。很公平,只是觉得可能有点混乱。