相关疑难解决方法(0)

访问bash命令行args $ @ vs $*

在许多SO问题和bash教程中,我看到我可以通过两种方式访问​​bash脚本中的命令行参数:

$ ~ >cat testargs.sh 
#!/bin/bash

echo "you passed me" $*
echo "you passed me" $@
Run Code Online (Sandbox Code Playgroud)

结果如下:

$ ~> bash testargs.sh arg1 arg2
you passed me arg1 arg2
you passed me arg1 arg2
Run Code Online (Sandbox Code Playgroud)

$*和之间有什么区别$@
应该何时使用前者,何时使用后者?

bash command-line-arguments

298
推荐指数
4
解决办法
18万
查看次数

在元素中包含空格的Bash数组

我正在尝试用我的相机在文件名的bash中构造一个数组:

FILES=(2011-09-04 21.43.02.jpg
2011-09-05 10.23.14.jpg
2011-09-09 12.31.16.jpg
2011-09-11 08.43.12.jpg)
Run Code Online (Sandbox Code Playgroud)

如您所见,每个文件名中间都有一个空格.

我已经尝试用引号括起每个名字,然后用反斜杠转义空格,两者都不起作用.

当我尝试访问数组元素时,它继续将空格视为elementdelimiter.

如何正确捕获名称中包含空格的文件名?

unix arrays bash scripting

136
推荐指数
6
解决办法
10万
查看次数

如何检查BASH列表中是否存在变量

我试图用bash编写一个脚本来检查用户输入的有效性.
我想将输入(比如变量x)与有效值列表进行匹配.

我现在想出的是:

for item in $list
do
    if [ "$x" == "$item" ]; then
        echo "In the list"
        exit
    fi
done
Run Code Online (Sandbox Code Playgroud)

我的问题是,是否有一种更简单的方法可以做到这一点,
就像list.contains(x)大多数编程语言一样.

增加:
说清单是:

list="11 22 33"
Run Code Online (Sandbox Code Playgroud)

我的代码将仅针对这些值回显消息,因为list它被视为数组而不是字符串,所有字符串操作都将1在我希望它失败时进行验证.

linux bash

123
推荐指数
13
解决办法
18万
查看次数

自动将所有mysql表转储到单独的文件中?

我想将每个mysql表转储到单独的文件中.手册指出了这个的语法

mysqldump [options] db_name [tbl_name ...]
Run Code Online (Sandbox Code Playgroud)

这表示您事先知道了表名.我现在可以设置知道每个表名的脚本,但是说我在路上添加一个新表并忘记更新转储脚本.然后我错过了一个或多个表的转储.

有没有办法将每个现有表自动转储到单独的文件中?或者我将不得不做一些剧本; 查询数据库,获取所有表名,并按名称转储它们.

如果我使用script-fu路由,哪些脚本语言可以访问mysql数据库?

mysqldump

64
推荐指数
6
解决办法
7万
查看次数

检查Bash数组中是否存在元素

我想知道是否有一种有效的方法来检查Bash中的数组中是否存在元素?我正在寻找类似于我在Python中可以做的事情,例如:

arr = ['a','b','c','d']

if 'd' in arr:
    do your thing
else:
    do something
Run Code Online (Sandbox Code Playgroud)

我已经看到使用关联数组为Bash 4+进行bash的解决方案,但我想知道是否还有其他解决方案.

请理解我知道琐碎的解决方案是迭代数组,但我不希望这样.

arrays bash shell search

63
推荐指数
4
解决办法
14万
查看次数

如何将数组传递给bash函数

如何将数组传递给函数,为什么这不起作用?其他问题的解决方案对我不起作用.为了记录,我不需要复制数组,所以我不介意传递引用.我想做的就是循环它.

$ ar=(a b c)
$ function test() { echo ${1[@]}; }
$ echo ${ar[@]}
a b c
$ test $ar
bash: ${1[@]}: bad substitution
$ test ${ar[@]}
bash: ${1[@]}: bad substitution
Run Code Online (Sandbox Code Playgroud)

arrays bash shell

12
推荐指数
2
解决办法
8025
查看次数

如何在不迭代元素的情况下检查字符串是否在数组中?

有没有办法检查一个字符串数组中是否存在字符串 - 没有遍历数组?

例如,给定下面的脚本,我如何正确地实现它来测试存储在变量$ test中的值是否存在于$ array中?

array=('hello' 'world' 'my' 'name' 'is' 'perseus')

#pseudo code
$test='henry'
if [$array[$test]]
   then
      do something
   else
      something else
fi
Run Code Online (Sandbox Code Playgroud)

注意

我正在使用bash 4.1.5

bash

12
推荐指数
2
解决办法
3万
查看次数

bash:在多个其他字符串中查找字符串

我正在尝试使用bash来查找任何字符串"sets"中是否存在短字符串.例如,

FRUIT="apple banana kiwi melon"
VEGETABLE="radish lettuce potato"
COLOR="blue red yellow green brown"

MY_CHOICE="kiwi"
MY_CHOICE_GROUP="?"
Run Code Online (Sandbox Code Playgroud)

如何设置MY_CHOICE_GROUPFRUIT

我试图使用这个StackOverflow解决方案,但它只适用于单个字符串集.

最初,我使用数组来存储集合中的选项,但是考虑到 bash处理数组迭代的方式,字符串搜索似乎更有效.

非常感谢!

string bash search list

3
推荐指数
1
解决办法
261
查看次数

喜欢if中的条款

以下是按预期工作.

for schema in `mysql -e"show databases"`
do
if [[ $schema = 'test' ]];then
echo $schema
fi
done
Run Code Online (Sandbox Code Playgroud)

但是当我需要选择以test开头的所有值时,由于明显的原因,以下内容不起作用......

if [[ $schema = 'test%' ]];then
Run Code Online (Sandbox Code Playgroud)

我想选择其他值,如test_db,test123等.

bash shell if-statement

2
推荐指数
1
解决办法
2万
查看次数

检查字符串是否存在于 bash 的字符串数组中

我知道如何在 bash 中比较两个字符串:

if [ "$build_type" = "devite" ]; then
  echo "building'"
fi
Run Code Online (Sandbox Code Playgroud)

但我需要的是检查“$build_type”是否在 [“devite”, “relite”] 中

所以类似这样的事情:

if [ "$build_type" in ["devite", "relite"] ]; then
  echo "building'"
fi
Run Code Online (Sandbox Code Playgroud)

任何人都可以阐明这一点吗?

bash

2
推荐指数
2
解决办法
4143
查看次数