如何将管道( | )存储在变量中?

如何将管道( | )存储在变量中?

这个想法是将它用作...命令中的管道。例如:假设有某种长路径,必须一次又一次地重新输入,然后是管道和第二个程序,即

"directory1/directory2/direcotry3/file.dat | less -I "

我希望将该部分存储在变量中,因此可以像这样使用它:

r="directory1/directory2/direcotry3 \| less -I -p "
$ cat path1/path2/$r <searchterm>

相反,我得到

cat: invalid option -- I
Try `cat --help' for more information.

...这意味着管道显然不起作用。

答案1

bash 在扩展变量后不会完全重新解释命令行。要强制执行此操作,请放在eval前面:

r="directory1/directory2/direcotry3/file.dat | less -I "
eval "cat path1/path2/$r"

尽管如此,还有更优雅的方法可以做到这一点(别名、函数等)。

答案2

您试图混合代码和数据,这不是一个好主意。相反,定义一个函数,它将文件(目录?)名称作为参数,并用less.

view () {
    less -I -p "$2" $1
}

view directory1/directory2/directory3 <searchterm>

相关内容