例如,
elif [[ $append = $1 ]]
then
touch ~/directory/"$2".txt
echo "$variable_in_question" >> ~/directory/"$2".txt
创建一个包含所有后续输入的文本文件"$2"
,或者追加一个现有所有输入后的文本文件,用"$2"
什么代替"$variable_in_question"
第4行?
我基本上想要"$*"
,但是省略"$1"
和"$2"
。
您可以使用bash
参数扩展来指定范围,这也适用于位置参数。对于$3
…… $n
,它将是:
"${@:3}" # expands to "$3" "$4" "$5" …
"${*:3}" # expands to "$3 $4 $5 …"
要知道,无论$@
和$*
忽略第一个参数$0
。如果您想在自己的情况下使用哪一个:很有可能需要引号$@
。不要使用$*
,除非你明确地不想要的参数进行单独报价。
您可以尝试如下操作:
$ bash -c 'echo "${@:3}"' 0 1 2 3 4 5 6
3 4 5 6
$ echo 'echo "${@:3}"' >script_file
$ bash script_file 0 1 2 3 4 5 6
2 3 4 5 6
请注意,在第一个示例$0
中,第一个参数填充了该参数,0
而在脚本中使用时,$0
则用脚本的名称填充了该参数,如第二个示例所示。脚本的名称bash
当然是第一个参数,只是通常不会这样认为–将脚本制成可执行文件并称为“直接”也是如此。因此,在第一个示例中,我们有$0
= 0
,$1
=1
等。在第二个示例中,我们是$0
= script_file
,$1
= 0
,$2
=1
等。${@:3}
选择以开头的每个参数$3
。
可能范围的一些其他示例:
# two arguments starting with the third
$ bash -c 'echo "${@:3:2}"' 0 1 2 3 4 5 6
3 4
# every argument starting with the second to last one
# a negative value needs either a preceding space or parentheses
$ bash -c 'echo "${@: -2}"' 0 1 2 3 4 5 6
5 6
# two arguments starting with the fifth to last one
$ bash -c 'echo "${@:(-5):2}"' 0 1 2 3 4 5 6
2 3
进一步阅读:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句