如何在bash中使用带有星号“*”的路径的变量?

约尔格·考克

我有一个变量的问题,内容是带星号的路径。

例子:

  • 。/脚本
  • /配置
  • /出口
  • /家/*
#!/bin/bash
#
dir=()
for i in $@; do
dir+="$i"
done

此变量来自启动脚本时的用户输入。但是一旦我使用这个变量,bash 就会扩展/home/*到 .bashrc 下的所有文件夹/home

我想用测试语句检查变量,如果有星号,则运行命令。

for i in ${dir[*]}; do
  if [[ "$i" == *"*"* ]]; then find $i -maxdepth 1 -type d
  fi
done

您是否知道如何正确地做到这一点,或者建议如何使用不同的方式来避免这种情况?

安德烈·波兹梅克

大多数变量扩展(极少数例外)应该用双引号引起来。然后你可以处理(几乎)任意参数。两个随机示例:

check_asterisk_v1() {
  local a
  for a in "$@"; do
    [[ "$a" == *'*'* ]] &&
        echo "argument '${a}' contains an asterisk"
  done
  echo "${#} arguments in total"
}

check_asterisk_v2() {
  local -ar args=("$@")
  local -i i
  for i in "${!args[@]}"; do
    [[ "${args[i]}" == *'*'* ]] &&
        echo "$((i + 1)). argument '${args[i]}' contains an asterisk"
  done
  echo "${#args[@]} arguments in total"
}

check_asterisk_v1 a '*' b '**' c '***' d
check_asterisk_v2 a '*' b '**' c '***' d

作为旁注,让我指出您的 for-cycle 看起来是错误的。这将字符串附加到0数组的第一个元素(索引dir(这没有多大意义):

dir=()
for i in "$@"; do dir+="$i"; done

这会将元素附加到数组dir(您可能实际上打算这样做):

dir=()
for i in "$@"; do dir+=("$i"); done

这是实现相同结果的更简单方法:

dir=("$@")

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在R中选择带有星号的变量

如何在zsh中使星号'*'具有与bash相同的行为?

如何在带有“#{...}”的 Ruby 变量参数中使用?

如何在文件路径中使用变量

如何在文件路径中使用变量

在变量中使用星号

在 VSCode 中使用带有根路径变量的 require

如何在使用 JSONPath 的数组中使用带有非空检查的路径

如何在目标路径中使用带有通配符(*)的scp复制?

如何在带有变量组的天蓝色DevOps yaml管道的变量中使用IF ELSE?

如何在带有私有变量的dart构造函数中使用它

在 c 中使用带有格式说明符的星号

如何在路径中使用变量编写VBA

如何在HTML的<links> href路径中使用变量

如何在Delphi搜索路径中使用系统变量?

如何在Qt StyleSheet中使用包含文件路径的变量

如何在命令参数中使用路径变量

如何在 PHP 中使用路径而不是 GET 变量?

如何在 HTML img src 路径中使用变量

如何在TypeScript中使用带有变量的可选链接运算符

如何在带有golang的不同容器中使用docker-compose env文件变量?

如何在Javascript中使用带有函数表达式的变量提升?

如何在console.log中使用带有多个变量的单引号

如何在botium中使用带有话语文件的变量

如何在 SQL 中使用带有其他参数的表变量?

如何在 Angular 中使用带有 ngClass 的变量的条件类和类?

如何在机器人框架中使用带有全局变量的“获取库实例”

如何在Kubernetes图表中使用带有正斜杠的变量?

如何在反应中使用带有变量名的 require()?