我的情况如下。
SEARCH="find `pwd` -name"
bash> $SEARCH resources.xml | grep $SEARCH_DIR | grep $1 | grep ‘cells’
但我没有得到pwd
该变量中引用的内容。
答案1
alias SEARCH='find . -name'
或者
SEARCH() { find . -name "$1"; }
用法
SEARCH resources.xml | ...
请注意,这SEARCH
不是变量。您可以将命令定义为变量 ( SEARCH='find . -name'
),但别名或函数定义是更常见的做法。
答案2
假设当前目录是/original/directory
在SEARCH=…
评估该行时和/later/directory
在$SEARCH …
评估该行时。
命令替换在定义`pwd`
变量时进行评估,因此设置为。如果当时当前目录不包含任何空格或通配符,则稍后在该目录中调用,即.SEARCH
SEARCH
find /original/directory -name
$SEARCH resources.xml
find
find /original/directory -name resources.xml
如果原始当前目录包含空格或通配符,则此操作将不起作用。除了非常简单的情况之外,像这样将命令填充到变量中是行不通的。看为什么我的 shell 脚本会因为空格或其他特殊字符而卡住?
如果你想跑find
进去/later/directory
,那你就跑吧find .
。但变量在这里并不是正确的工具。变量用于存储字符串。带参数的命令不是字符串,而是列表字符串。 shell 代码片段可以存储在字符串中,$SEARCH
但是不是将 的值SEARCH
作为 shell 代码片段运行(再次参见为什么我的 shell 脚本会因为空格或其他特殊字符而卡住?)。要存储 shell 代码片段以供以后使用,请定义一个函数。
SEARCH () {
find "$PWD" -name "$@"
}
…
SEARCH resources.xml | …
再次,这运行find
在/later/directory
.如果您想find
在 中运行/original/directory
,最好的方法是将该目录存储在一个变量中,并在以后使用该变量。
original_directory="$PWD"
SEARCH () {
find "$original_directory" -name "$@"
}
…
SEARCH resources.xml | …