【问题标题】:Search for username substring in pwd string [duplicate]在密码字符串中搜索用户名子字符串 [重复]
【发布时间】:2016-03-21 22:22:47
【问题描述】:

知道这个脚本有什么问题吗?我正在尝试检查用户名是否是当前工作目录文件路径的一部分。我已经包含了同一事物的两个不同实现,但它们都不起作用。

#!/bin/bash

USER_NAME=$(whoami)

if [[ "$USER_NAME" == *"$PWD"* ]]; then
  echo $PWD
else
  echo "not found"
fi

case "$USER_NAME" in 
  *$PWD*) echo $PWD ;;
esac

另外,这也不起作用:

grep "$USER_NAME" "$PWD"

但是,这是可行的:

echo "$PWD" | grep "$USER_NAME"

知道这里发生了什么吗?

编辑:这也不起作用:

if [[ *"$PWD"* == "$USER_NAME" ]]; then
  echo "found"
else
  echo "not found"
fi

甚至这个:

if [[ $PWD == $USER_NAME ]]; then
  echo "found"
else
  echo "not found"
fi

或* 的任何其他组合或到目前为止我尝试过的引号。

编辑2:

终于明白了,不得不用这个:

if [[ $PWD == *$USER_NAME* ]]; then
  echo "found"
else
  echo "not found"
fi

【问题讨论】:

  • 我在 SO 和 SE 上提到了许多不同的问题来解决这个问题,这是我得到示例的地方,但没有找到关于为什么这些示例不起作用的明确答案。
  • 只需检查一个重复项,然后将其与您的代码进行比较...草率和编程不能很好地结合在一起。
  • @CharlesDuffy:你也没有看到吗?哈哈。我会发布答案...
  • 哦。向后。 掌心.
  • 我已经尝试过交换参数,但它仍然不起作用。还尝试了引号和 * 的各种组合,它们似乎都没有导致 PWD 路径中的用户名匹配

标签: bash


【解决方案1】:

有两件事,您搜索的内容和搜索的内容。您在示例中混合了两者。

if [[ "$USER_NAME" == *"$PWD"* ]]; then
           ^------swap----^

而由PWD 的内容命名的文件 中的这个grep 显然是行不通的,因为PWD 是一个目录,而不是一个文件:

grep "$USER_NAME" "$PWD"

【讨论】:

  • 我已经尝试过交换它们,但它仍然有效/无效
  • 废话。发布它失败的变量的值。
猜你喜欢
  • 2019-10-06
  • 2019-09-03
  • 1970-01-01
  • 2013-09-25
  • 2018-12-01
  • 2016-11-15
  • 2016-06-21
  • 2013-11-09
相关资源
最近更新 更多