我想做这样的事情,但保留$i
之后的每个参数:
for i in "$@"; do
if [[ $i == "--" ]]; then
set $i "-S --"
break
fi
done
ls "$@"
在这个例子中,我想在ls
上创建一个简单的包装器,其中-S
始终是应用的最终选项。
如果参数没有“ - ”:
,这很简单ls "$@" -S
但是,只要有“ - ”作为参数,就会中断。
要解决此问题,我想首先找到--
,并在其前面放置一个-S
。
编辑:
我不使用的原因:
ls -S "$@"
是因为我希望输出按大小LAST排序。因此,如果将-t
传递给参数,则输出应按修改时间THEN按大小排序。那个用例在这里失败了:
ls -S -t
答案 0 :(得分:1)
通过迭代第一个数组并在需要的位置插入-S
来创建第二个数组。
#! /bin/bash
arr=()
for arg in "$@" ; do
if [[ $arg == -- ]] ; then
arr+=(-S --)
else
arr+=("$arg")
fi
done
ls "${arr[@]}"
您可能只需插入一次即可完全正确:
#! /bin/bash
arr=()
inserted=
for arg in "$@" ; do
if [[ $arg == -- && ! $inserted ]] ; then
arr+=(-S --)
inserted=1
else
arr+=("$arg")
fi
done
如果您确实需要设置位置参数,请使用
set "${arr[@]}"
将位置参数设置为$ {arr [@]}的成员。