String Bash保存tr操纵的字符串
我有一个小程序,它要求用户输入它的名字和姓氏。我需要将给定姓氏的最后一个字符更改为名字和姓氏中的下划线(以及字符串中出现的任何下划线)。我还需要将用户的名字改为大写字母。我得到了代码的这一部分,在这里我操作给定的字符串String Bash保存tr操纵的字符串,string,bash,replace,character,String,Bash,Replace,Character,我有一个小程序,它要求用户输入它的名字和姓氏。我需要将给定姓氏的最后一个字符更改为名字和姓氏中的下划线(以及字符串中出现的任何下划线)。我还需要将用户的名字改为大写字母。我得到了代码的这一部分,在这里我操作给定的字符串 echo -n "Hello " X="$X" | tr ${Y:(-1)} "_" echo -n "${X^^}" echo " $Y" | tr ${Y:(-1)} "_" 出于某种原因,第2行:X=“$X”| tr${Y:(-1)}”没有像我希望的那样保存变量。例如,当
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_uo_uuNikko”
。我试图通过编写echo“${X^^}”tr${Y:(-1)}”
来解决这个问题,但它仍然返回“Hello CANNON Nikko”
。我发现n和n不是同一个字符,所以不会改变
但是为什么不在第2行保存变量呢?我需要如何处理这个问题?如果我理解正确,
与此相反:
您要执行以下操作:
X=$(tr ${Y:(-1)} "_" <<< "$X")
如果我理解正确的话,
与此相反:
您要执行以下操作:
X=$(tr ${Y:(-1)} "_" <<< "$X")
X=$(tr${Y:(-1)}”使用正确的工具更改字符串${/}
first="jason";
echo "${first/%?/_}" ### Using % means: "at the end of the string".
完全改变将是:
first="jason";
first="${first/%?/_}"
first="${first^}" ### Use ^^ to change all the string.
echo "$first"
并且,询问用户将是:
#!/bin/bash
read -rp "Your first name, please: ? " first
read -rp "Your Last name, please: ? " last
first="${first/%?/_}"
first="${first^}"
last="${last/%?/_}"
last="${last^}"
echo "$first $last"
使用正确的工具更改字符串${/}
first="jason";
echo "${first/%?/_}" ### Using % means: "at the end of the string".
完全改变将是:
first="jason";
first="${first/%?/_}"
first="${first^}" ### Use ^^ to change all the string.
echo "$first"
并且,询问用户将是:
#!/bin/bash
read -rp "Your first name, please: ? " first
read -rp "Your Last name, please: ? " last
first="${first/%?/_}"
first="${first^}"
last="${last/%?/_}"
last="${last^}"
echo "$first $last"
当然,第2行不生成输出;赋值语句不生成输出,因此管道不读取任何内容。此外,您正在子shell中设置X
,该子shell在管道完成后退出。当然,第2行不生成输出;赋值语句不生成输出,因此管道不读取任何内容。此外,您正在su中设置X
b管道完成后退出的shell。^
表示每个匹配模式的大写字母(如果省略,则默认为?
),因此不需要首字母
。只需使用${first^}
@janos是的,谢谢你的回答。我来自java,对Bash是个新手。我现在知道了如何正确地用tr保存一个被操纵的字符串。^
表示每个匹配的模式都是大写的(如果省略,默认为?
),所以第一个字母是不必要的。只需使用${first^}
@janos是的,谢谢你的回答。我来自java,对Bash不熟悉。我现在了解了如何使用tr正确保存已操纵的字符串。谢谢,我已经准备好了阅读部分。不过,我在前面编辑了问题,说找到的最后一个字符需要替换,字符串中出现的每一个字符都需要替换为谢谢,我已经准备好了阅读部分。但是我在前面编辑了问题,说找到的最后一个字符需要替换,字符串中出现的每一个字符都需要替换。