如何执行变量中的命令

如何执行变量中的命令

我的情况如下。

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/directorySEARCH=…评估该行时和/later/directory$SEARCH …评估该行时。

命令替换在定义`pwd`变量时进行评估,因此设置为。如果当时当前目录不包含任何空格或通配符,则稍后在该目录中调用,即.SEARCHSEARCHfind /original/directory -name$SEARCH resources.xmlfindfind /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 | …

相关内容