bash 将值传递给命令

bash passing value into command

我有一个变量,我想将其值传递给命令。但是 $ 产生了不寻常的结果。它看起来像一个 * 并搜索所有目录。我的代码是:

"Please enter the test type: "
read test

result="pass"
search_result=`find ./logs/$test_2017_01_logs*/* -type f -name func_log -exec egrep $result {} \;`

echo "$search_result"

我只想搜索用户读入的目录后缀,而不是我的代码正在做的所有目录。

问题是由于传入的值 ($test) 和文件夹名称的其余部分 (_2017_01_logs*) 的串联引起的吗?

_ 是 "word character" ([a-zA-Z0-9_]) 并且被理解为您正在寻址的变量的一部分,因此是未定义的 $test_2017_01_logs.

为避免这种情况,您可以将变量名括在花括号中:

find ./logs/"${test}_2017_01_logs"*/* -type f -name func_log -exec egrep $result {} \;

或者,如果我们遵循 Charles Duffy 的 well-advised 提示:

find ./logs/"$test"_2017_01_logs*/* -type f -name func_log -exec egrep -h -e "$result" /dev/null {} +