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)
然而,有更优雅的方法来做到这一点(别名、函数等)。
您正在尝试混合代码和数据,这不是一个好主意。相反,定义一个函数,它将文件(目录?)名称作为参数,并以less.
view () {
less -I -p "$2" $1
}
view directory1/directory2/directory3 <searchterm>
Run Code Online (Sandbox Code Playgroud)