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


12

想法是将其用作...命令中的管道。例如:说有某种长路径必须反复输入,然后是管道和第二个程序,即

"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
虽然可以eval,但通常您会执行功能。
frostschutz

Answers:


21

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

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

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


8

您正在尝试混合代码和数据,这不是一个好主意。而是定义一个函数,该函数以文件(目录?)名称作为参数,并使用来显示它less

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

view directory1/directory2/directory3 <searchterm>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.