我正在尝试编写一个脚本来查找文件,如果找到,则将完整路径保存到变量。当前版本:
if [[ -n FOUND_PATH=$(find "$PATH" -name "file.exe") ]]; then
echo "Found, full path: "$FOUND_PATH
else
echo "Not found."
fi
[[ -n ]]
即使实际上没有找到文件并且FOUND_PATH
实际上是空的,也会将表达式评估为 true。我究竟做错了什么?
编辑:
为了说明我当前遇到的问题,这段代码:
find "$PATH" -name "file.exe"
FOUND_PATH=$(find "$PATH" -name "file.exe")
if [[ -n "$(FOUND_PATH)" ]]; then
echo "Found, full path: "$FOUND_PATH
else
echo "Not found."
fi
返回 just Found, full path:
,因此第一行根本不输出任何内容,但是当稍后在第三行中检查它是否为非空字符串时,它的计算结果为非空!
答案1
bash 中的赋值不会像 C 中那样给出一些结果。你必须这样做:
FOUND_PATH=$(find "$PATH" -name "file.exe")
if [[ -n "$FOUND_PATH" ]]; then
echo "Found, full path: $FOUND_PATH"
else
echo "Not found."
fi
并确保您的 $FOUND_PATH 位于第一个参数中的双引号之间echo
。
如果您的 $PATH 不是单个目录,但例如/usr/bin:/bin
您可能希望将第一行更改为:
FOUND_PATH=$(find $(echo "$PATH" | sed "s/:/ /g" ) -name "file.exe")