我想通过参数2更改参数1,但输出不正确
#!/bin/sh
getline="hello mr XXX";
name="NAME";
echo $getline | tr "XXX" "$name" ;
输出是:"你好MMM"
你知道吗?答案 0 :(得分:2)
tr
命令以1对1的方式将字符映射到字符,即输入中的X
映射到替换中的M
(最后一个映射)。
将XXX
替换为变量NAME
的值,您可以使用sed
或参数替换,如下所示:
$ sed 's/XXX/'"$name"'/g' <<< "hello mr XXX"
hello mr NAME
OR
$ echo ${getline//XXX/$name}
hello mr NAME
答案 1 :(得分:1)
tr
期望输入/输出集之间的1:1映射:
tr XXX NAME
123 1234
由于输入中有三个相同的字符,因此只有最后一个用于映射,而X#3映射到&#34;替换中的字符#3&#34;参数恰好是M
如果您将命令扩展一点:
$ echo hello mr XXXYZ|tr "XXXY" "NAME"
hello mr MMMEZ
Y
映射到E
,因为它们都是输入/输出集中的第4个字符。