bash:不了解这两种方法之间的区别-应该相同,但是不是吗?

时间:2019-12-26 03:10:52

标签: bash menu dialog tr

我有一个文件:$ cat /tmp/test.txt
1 "African Countries AFR" 2 "Albania AL" 3 "Arab Countries ARB" 4 "Austria AT"

我正在尝试学习此linux实用程序,但这显然是错误的:

$ dialog --menu "Choose toppings:" 35 35 5 $(cat /tmp/test.txt)

                                  │ │    1          "African      │ │  
                                  │ │    Countries  AFR"          │ │  
                                  │ │    2          "Albania      │ │  
                                  │ │    AL"        3             │ │  
                                  │ │    "Arab      Countries     │ │  
                                  │ │    ARB"       4             │ │  
                                  │ │    "Austria   AT"           │ │  

所以我想我应该尝试没有换行符:

$ dialog --menu "Choose toppings:" 35 35 5 $(cat /tmp/test.txt | tr -d '\n')

但这也是错误的(与上面相同的结果)!经过很多努力之后,我决定尝试手动添加内容并将其作为参数输入命令行:

$ cat /tmp/test.txt | tr -d '\n'
     1 "African Countries AFR"     2 "Albania AL"     3 "Arab Countries ARB"     4 "Austria AT"

所以这是命令行和结果:

$ dialog --menu "Choose toppings:" 30 35 5   1 "African Countries AFR"     2 "Albania AL"     3 "Arab Countries ARB"     4 "Austria AT"

                                  │ │  1  African Countries AFR   │ │  
                                  │ │  2  Albania AL              │ │  
                                  │ │  3  Arab Countries ARB      │ │  
                                  │ │  4  Austria AT              │ │  

突然结果是正确的-为什么?

我该如何修改“ dialog --menu”(选择浇头:) 35 35 5 $(cat /tmp/test.txt | tr -d'\ n')“行,以便给出正确的结果? / p>

2 个答案:

答案 0 :(得分:1)

使用--file选项:

dialog --menu "Choose toppings:" 35 35 5 --file /tmp/test.txt

答案 1 :(得分:1)

正如您所说,通常还有另一种方式...

cat << EOF > magic
dialog --menu "Choose toppings:" 35 35 5 $(test.txt | tr '\n' ' ')
EOF

. magic

或者如果您愿意使用eval

eval $(cat << EOF
dialog --menu "Choose toppings:" 35 35 5 $(test.txt | tr '\n' ' ')
EOF