【发布时间】:2016-01-28 18:03:39
【问题描述】:
我有一个小程序询问用户的名字和姓氏。我需要将给定姓氏的最后一个字符更改为名字和姓氏中的下划线(以及字符串中任何出现的下划线)。我还需要将用户的名字更改为大写字母。我得到了这部分代码,我在其中操作给定的字符串。
echo -n "Hello "
X="$X" | tr ${Y:(-1)} "_"
echo -n "${X^^}"
echo " $Y" | tr ${Y:(-1)} "_"
出于某种原因,第 2 行:X="$X" | tr ${Y:(-1)} "_" 不会像我想要的那样保存变量。例如,当我填写"Cannon Nikkon" 时,程序返回"Hello CANNON Nikko_"。但是当我打印echo "$X" | tr ${Y:(-1)} "_" 时,它会打印"Hello Ca__o_ Nikko_"。我试图用写echo "${X^^}" | tr ${Y:(-1)} "_" 来解决它,但它仍然返回"Hello CANNON Nikko_"。我发现因为 n 和 N 不是相同的字符,所以它不会改变。
但是为什么它不保存第 2 行中的变量呢?我需要如何解决这个问题?
【问题讨论】:
-
当然第 2 行没有;赋值语句不产生输出,因此管道不读取任何内容。此外,您在子shell 中设置
X,一旦管道完成,该子shell 就会退出。
标签: string bash replace character