我试图找出为什么这可以从命令行工作但是当它在变量中时,我试图计算一个数字的唯一出现次数,
$ echo 1,1,2,3,4,5 | tr , \\n | sort -u | wc -l
5
$ test=`echo 1,1,2,3,4,5 | tr , \\n | sort -u | wc -l`
$ echo $test
1
我假设它在变量中被视为一行,但不确定为什么以及如何解决它?
谢谢!
答案 0 :(得分:3)
您可以通过set -x
:
$ test=`set -x; echo 1,1,2,3,4,5 | tr , \\n | sort -u | wc -l`
++ echo 1,1,2,3,4,5
++ tr , n
++ wc -l
在这里,您会看到\n
成为n
\n
的逃脱失败;尝试
test=`echo 1,1,2,3,4,5 | tr , '\n' | sort -u | wc -l`
引号会阻止'\'逐渐消失
甚至
test=$(echo 1,1,2,3,4,5 | tr , '\n' | sort -u | wc -l)
因为我们通常会优先使用$()反引导可能导致其他类型的麻烦
答案 1 :(得分:1)
使用awk
可以避免所有管道命令:
count=$(echo 1,1,2,3,4,5 | awk -v RS=, '!seen[$1]++{c++} END{print c}')
echo $count
5