gpt4 book ai didi

linux - 循环输入中的多个变量?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:00:12 25 4
gpt4 key购买 nike

使用以下内容时:

for what in $@; do
read -p "Where?" where
grep -H "$what" $where -R | cut -d: -f1

在调用脚本时,我如何才能不使用读取来定义用户变量,而是在输入第一个变量的同时输入第二个变量。

例如,我认为我可以获得的理想用法是这样的:

sh scriptname var1 var2

但我的理解是 for... 行用于将后续的整体循环到一个变量中;我需要更改什么才能输入多个变量?

最佳答案

顺便说一句:使用 | cut -D: -f1 不安全,因为 grep 不会转义文件名中的冒号。要明白我的意思,您可以试试这个:

ghoti@pc:~$ echo bar:baz > foo
ghoti@pc:~$ echo baz > foo:bar
ghoti@pc:~$ grep -Hr ba .
./foo:bar:baz
./foo:bar:baz

清晰..没有。

那么...让我们澄清一下您要查找的内容。

  1. 您想在多个文件中搜索一个字符串吗?或者,
  2. 您想在一个文件中搜索多个字符串吗?

如果是前者,则以下可能有效:

#!/bin/bash

if [[ "$#" -lt 2 ]]; then
echo "Usage: `basename $0` string file [file ...]
exit 1
fi

what="$1"
shift # discard $1, move $2 to $1, $3 to $2, etc.

for where in "$@"; do
grep -HlR "$what" "$where" -R
done

如果是后者,那么就是这样:

#!/bin/bash

if [[ "$#" -lt 2 ]]; then
echo "Usage: `basename $0` file string [string ...]
exit 1
fi

where="$1"
shift

for what in "$@"; do
grep -lR "$what" "$where"
done

当然,如果你用 or 连接你的字符串,然后使用 egrep,这个可能会被简化。取决于您实际要查找的内容。

关于linux - 循环输入中的多个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14792422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com