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

lau*_*aur 12 bash pipe variable

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

"directory1/directory2/direcotry3/file.dat | less -I "
Run Code Online (Sandbox Code Playgroud)

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

r="directory1/directory2/direcotry3 \| less -I -p "
$ cat path1/path2/$r <searchterm>
Run Code Online (Sandbox Code Playgroud)

相反,我得到

cat: invalid option -- I
Try `cat --help' for more information.
Run Code Online (Sandbox Code Playgroud)

...意味着管道显然没有工作。

jof*_*fel 23

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

r="directory1/directory2/direcotry3/file.dat | less -I "
eval "cat path1/path2/$r"
Run Code Online (Sandbox Code Playgroud)

然而,有更优雅的方法来做到这一点(别名、函数等)。


che*_*ner 9

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

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

view directory1/directory2/directory3 <searchterm>
Run Code Online (Sandbox Code Playgroud)