如何将数组作为参数传递给bash函数?
注意:在Stack Overflow上没有找到答案后,我自己发布了一些粗略的解决方案.它只允许传递一个数组,它是参数列表的最后一个元素.实际上,它根本没有传递数组,而是传递了它的元素列表,这些元素通过called_function()重新组合成一个数组,但它对我有用.如果有人知道更好的方式,请随时在此处添加.
我想将每个mysql表转储到单独的文件中.手册指出了这个的语法
mysqldump [options] db_name [tbl_name ...]
Run Code Online (Sandbox Code Playgroud)
这表示您事先知道了表名.我现在可以设置知道每个表名的脚本,但是说我在路上添加一个新表并忘记更新转储脚本.然后我错过了一个或多个表的转储.
有没有办法将每个现有表自动转储到单独的文件中?或者我将不得不做一些剧本; 查询数据库,获取所有表名,并按名称转储它们.
如果我使用script-fu路由,哪些脚本语言可以访问mysql数据库?
我们知道,在bash编程中,传递参数的方式是$1...... , $N. 但是,我发现将数组作为参数传递给接收多个参数的函数并不容易.这是一个例子:
f(){
x=($1)
y=$2
for i in "${x[@]}"
do
echo $i
done
....
}
a=("jfaldsj jflajds" "LAST")
b=NOEFLDJF
f "${a[@]}" $b
f "${a[*]}" $b
Run Code Online (Sandbox Code Playgroud)
如上所述,函数f接收两个参数:第一个分配给x一个数组,第二个分配给y.
f可以通过两种方式调用.第一种方法使用"${a[@]}"第一个参数,结果是:
jfaldsj
jflajds
Run Code Online (Sandbox Code Playgroud)
第二种方式使用"${a[*]}"第一个参数,结果是:
jfaldsj
jflajds
LAST
Run Code Online (Sandbox Code Playgroud)
结果都不如我所愿.那么,有没有人知道如何正确地在函数之间传递数组?
首先:raku (perl6) 很棒。克罗也是。只用了一个周末就坠入爱河。但是现在我偶然发现了一些必须非常简单的东西。
如果我在多分派 MAIN 中使用 slurpy 参数,则可以识别并完美运行:
multi MAIN( 'config', 'add', *@hostnames ) {
Run Code Online (Sandbox Code Playgroud)
但是,如果我将其设为非 slurpy 数组,则要么无法识别,要么我不知道如何从命令行提供它:
multi MAIN( 'config', 'add', @hostnames ) {
Run Code Online (Sandbox Code Playgroud)
我希望这些调用之一能够工作:
$ cli.raku config add www.example.com example.com
$ cli.raku config add www.example.com,example.com
$ cli.raku config add www.example.com, example.com
Run Code Online (Sandbox Code Playgroud)
Cro CLI 中使用了类似的构造,但是没有示例说明如何使用文档中的数组调用其中一个命令。
我也用一个数组作为命名参数尝试了这个:
my %*SUB-MAIN-OPTS = :named-anywhere;
multi MAIN( 'config', 'add', :@hostnames) {
Run Code Online (Sandbox Code Playgroud)
鉴于raku 文档中的示例,我希望它可以工作:
$ cli.raku config add --hostnames=www.example.com example.com
Run Code Online (Sandbox Code Playgroud)
但它没有,也没有逗号或空格逗号分隔的变体。在所有情况下,我都会获得使用信息。
multiple-dispatch command-line-interface named-parameters raku
我看了,但只看到了一个脚本中传递的数组的答案.
我想将多个数组传递给bash脚本,该脚本将它们分配为单个变量,如下所示:
./myScript.sh ${array1[@]} ${array2[@]} ${array3[@]}
Run Code Online (Sandbox Code Playgroud)
这样的:var1=array1和var2=array2和var3=array3
我已经尝试了多个选项,但是variableName=("$@")将所有数组组合成每个变量.我希望在我的bash脚本中有一个代表每个数组的变量.
我正在编写一个小的 bash 脚本并希望通过 ssh 执行以下命令
sudo -i mysql -uroot -pPASSWORD --execute "select user, host, password_last_changed from mysql.user where password_last_changed <= '2016-9-00 11:00:00' order by password_last_changed ASC;"
Run Code Online (Sandbox Code Playgroud)
不幸的是,这个命令同时包含单引号和双引号,所以我做不到
ssh user@host "command";
Run Code Online (Sandbox Code Playgroud)
解决此问题的推荐方法是什么?