Questions tagged «parameter»

7
以相反顺序打印外壳参数
我有点卡住。我的任务是按相反的顺序将参数打印到脚本中,但第三个和第四个除外。 我的代码是这样的: #!/bin/bash i=$# for arg in "$@" do case $i in 3) ;; 4) ;; *) eval echo "$i. Parameter: \$$i";; esac i=`expr $i - 1` done 由于我讨厌eval(向PHP致意),因此我在寻找一种没有解决方案的解决方案,但找不到解决方案。 如何动态定义参数的位置? PS:不,这不是一项家庭作业,我正在学习考试外壳,因此我尝试解决旧的考试。

2
bash函数中的可选参数
我有一个快速创建新的SVN分支的功能,如下所示 function svcp() { svn copy "repoaddress/branch/$1.0.x" "repoaddress/branch/dev/$2" -m "dev branch for $2"; } 我用它来快速创建一个新分支,而不必查找并复制粘贴地址和其他内容。但是,对于消息(-m选项),我想使用它,以便如果我提供第三个参数,则将其用作消息,否则将使用“ $ 2的dev分支”的“默认”消息。有人可以解释如何完成吗?

1
Bash别名,命令中包含空格
我正在尝试创建一个bash别名,别名本身中有一个空格。 这个想法是别名(即con)代表sudo openvpn --config /path/to/my/openvpn/configs/。con使用别名时,这将导致可读命令。 即: `con uk.conf` == `sudo openvpn --config /path/to/my/openvpn/configs/uk.conf` 我知道我不能这样声明别名: con ="sudo openvpn --config /path/to/my/openvpn/configs/"。bash函数在这种情况下会起作用吗?我从未听说过,但是在研究此小问题的解决方案时。

2
计算bash数组中元素的数目,其中数组名称是动态的(即存储在变量中)
问题的简要说明: 是否有内置的bash方法来计算bash数组中元素的数量,而该数组的名称是动态的(即存储在变量中),而无需求助于对该数组的完全复制或使用eval? 更多信息: 使用bash参数替换,可以执行以下操作: 确定数组的长度: myArr=(A B C); echo ${#myArr[@]}。 通过名称间接引用变量:( NAME=myVar; echo ${!NAME}这也适用于数组元素): NAME=myArr[1]; echo ${!NAME} 但是,如果数组的名称存储在另一个变量中,那么如何确定数组中元素的数量呢?(可以将其视为上述两个参数替换的组合。)例如: myArr=(A B C D) NAME=myArr # Get the number of elements in the array indirectly referenced by NAME. count=${#$NAME[@]} # This syntax is invalid. What is the right way? 以下是所有失败的多次尝试: # Setup …

5
索引和修改Bash参数数组$ @
是否可以引用中的索引$@?我在GrayCat的wiki中的任何地方都找不到像下面这样的引用,而Advanced Scripting Guide和其他脚本则在修改它之前将其分配给其他变量。 $ echo ${@[0]} -bash: ${@[0]}: bad substitution 目标是DRY:第一个参数用于一件事情,其余参数用于其他事情,我想避免重复代码以标准化,$@数组或为此创建单独的函数(尽管在此情况下)指出这可能是最简单的出路)。 澄清:目的是修改可变长度 的值,$@以使代码更易于调试。尽管我什至喜欢像这样的怪异路径,但当前的版本还是有点过于hacky $'--$`\! *@ \a\b\e\E\f\r\t\v\\\"\' \n' 更新:看来这是不可能的。该代码现在同时使用代码和数据重复,但是至少可以使用: path_common() { # Get the deepest common path. local common_path="$(echo -n "${1:-}x" | tr -s '/')" common_path="${common_path%x}" shift # $1 is obviously part of $1 local path while [ -n "${1+defined}" ] …
11 bash  parameter 





10
Bash:提取IPv4地址的四个部分之一
我们可以使用语法${var##pattern}并${var%%pattern}提取IPv4地址的最后一部分和第一部分: IP=109.96.77.15 echo IP: $IP echo 'Extract the first section using ${var%%pattern}: ' ${IP%%.*} echo 'Extract the last section using ${var##pattern}: ' ${IP##*.} 我们如何使用参数扩展来提取IPv4地址的第二部分或第三部分? 这是我的解决方案:我使用数组并更改IFS变量。 :~/bin$ IP=109.96.77.15 :~/bin$ IFS=. read -a ArrIP<<<"$IP" :~/bin$ echo ${ArrIP[1]} 96 :~/bin$ printf "%s\n" "${ArrIP[@]}" 109 96 77 15 此外,我已经写了使用一些解决方案awk,sed以及cut命令。 现在,我的问题是:是否有一个不使用数组和IFS更改的基于参数扩展的简单解决方案?

2
是否可以在CLI中直接使用shell参数变量($ 1,…,$ @)?
有时有必要在小示例中模拟并验证上述变量,然后可以将其立即复制到某些脚本等中。 我尝试通过以下方式使用一个简单的示例来解决: (find $1) /tmp sh -c '(find $1) /tmp' sh -c "find $1" /tmp echo '(find $1) /tmp' | sh 以及其他组合。还通过添加shebang解释器指令进行了实验#!/bin/sh -x,但未获得期望的结果。 我可以简单地做到这一点吗?


1
将关联数组作为参数列表传递给脚本
在脚本中,我有一个类似的关联数组: declare -A VARS=( ["key1"]="value1" ["key2"]="value" ) 是否有单个命令将其转换为以下形式的参数列表 --key1=value1 --key2=value2 无需手动重写 --key1="${VARS[key1]}" --key2="${VARS[key2]}" 我想到的用例是将数组作为参数列表传递给脚本,例如 my_script.sh $(to_param_list $VARS) 为了扩展我对@Kusalananda答案的评论,我的确切用例如下:我有一个脚本,该脚本用于使用makeself来构建自解压安装程序,该脚本接收一些参数,这些参数将在以下参数之间进行分隔: 脚本本身的参数 自解压安装程序中安装程序的参数 然后,脚本将按以下方式构建安装程序: to_param_list installer_param_list installer_param_array ./makeself ./path/to/sourcedir ./path/to/created/installer "My installer" ./path/to/install/inside/package "${installer_param_list[@]}" 但是,我已经使用包中的一个非常简单的安装程序脚本测试了传递的参数: while ! -z "$1" ; do echo "$1" shift done 并传递一个像这样的数组: installer_param_array=( ["upgrade-from"]="19 .2.0" ["upgrade-to"]="19.3.0" ) 结果如下: --upgrade-to=19.3.0 …

5
在Bash数组上使用参数替换
我有要读入Bash数组的file.txt文件。然后,我需要删除空格,双引号以及每个条目中除第一个逗号以外的所有内容。这是我走了多远: $ cat file.txt 10,this 2 0 , i s 30,"all" 40,I 50,n,e,e,d,2 60",s e,e" $ cat script.sh #!/bin/bash readarray -t ARRAY<$1 ARRAY=( "${ARRAY[@]// /}" ) ARRAY=( "${ARRAY[@]//\"/}" ) for ELEMENT in "${ARRAY[@]}";do echo "|ELEMENT|$ELEMENT|" done $ ./script.sh file.txt |ELEMENT|10,this| |ELEMENT|20,is| |ELEMENT|30,all| |ELEMENT|40,I| |ELEMENT|50,n,e,e,d,2| |ELEMENT|60,se,e| 除逗号情况外,哪种效果都很好。我知道有很多方法可以给这只猫换皮,但是由于这是其中较大的脚本,所以我真的很想使用参数替换到达此处: |ELEMENT|10,this| |ELEMENT|20,is| |ELEMENT|30,all| |ELEMENT|40,I| …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.