砍字符串(用户传递的参数)[重复]
Posted
技术标签:
【中文标题】砍字符串(用户传递的参数)[重复]【英文标题】:chop string(arguments passed by user) [duplicate] 【发布时间】:2021-11-26 23:45:02 【问题描述】:假设用户传递了5个参数($1
$2
$3
$4
$5
),我如何切断前两个参数($1
$2
)我只想要最后一个3 个参数
awk 'print $3,$4,$5 < $@'
如果我不知道传递了多少个参数但我不想要前两个参数怎么办
我不能使用 shift,因为我还需要 $2 的信息,那我该怎么办?
我在 bash 脚本中 tar 文件时遇到了这个问题,当用户可能使用像 *.txt
这样的正则表达式时,shell 会自动将其转换为 file1.txt
file2.txt
(假设只有两个 .txt
文件)
【问题讨论】:
看看shift
(见help shift
)。
foo="$2"; shift 2
?
@Socowi 如果我使用 shift 它将删除 $2 中的内容,但我还需要来自用户的信息
见赛勒斯的评论。您可以在移位之前将参数存储在变量中。
【参考方案1】:
有一个语法:
#!/bin/bash
# note: indexing starts at 0
# 0: script name
# 1: arg 1
# 2: arg 2
# this will skip the script name, arg1 and arg2
echo "$@:3"
【讨论】:
如果我执行tar -cvf $2 ../source/$@:3)
之类的操作,以下代码的指示器会变为红色,这是否正常
@Bob 您使用了右括号而不是花括号。另外,您是否尝试将“../source/”添加到每个参数(以$3
开头),或者只是添加到$3
(以及$4
、$5
等) '没有得到前缀)?最后,您应该在参数和变量引用周围加上双引号,包括$2
和$@
。以上是关于砍字符串(用户传递的参数)[重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用javascript在包含特殊字符的URL中传递参数[重复]