在许多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中构造一个数组:
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.
如何正确捕获名称中包含空格的文件名?
我试图用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
在我希望它失败时进行验证.
我想将每个mysql表转储到单独的文件中.手册指出了这个的语法
mysqldump [options] db_name [tbl_name ...]
Run Code Online (Sandbox Code Playgroud)
这表示您事先知道了表名.我现在可以设置知道每个表名的脚本,但是说我在路上添加一个新表并忘记更新转储脚本.然后我错过了一个或多个表的转储.
有没有办法将每个现有表自动转储到单独的文件中?或者我将不得不做一些剧本; 查询数据库,获取所有表名,并按名称转储它们.
如果我使用script-fu路由,哪些脚本语言可以访问mysql数据库?
我想知道是否有一种有效的方法来检查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的解决方案,但我想知道是否还有其他解决方案.
请理解我知道琐碎的解决方案是迭代数组,但我不希望这样.
如何将数组传递给函数,为什么这不起作用?其他问题的解决方案对我不起作用.为了记录,我不需要复制数组,所以我不介意传递引用.我想做的就是循环它.
$ 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) 有没有办法检查一个字符串数组中是否存在字符串 - 没有遍历数组?
例如,给定下面的脚本,我如何正确地实现它来测试存储在变量$ 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来查找任何字符串"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_GROUP
到FRUIT
?
我试图使用这个StackOverflow解决方案,但它只适用于单个字符串集.
最初,我使用数组来存储集合中的选项,但是考虑到 bash处理数组迭代的方式,字符串搜索似乎更有效.
非常感谢!
以下是按预期工作.
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 中比较两个字符串:
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)
任何人都可以阐明这一点吗?