我一直在谷歌上看了很长一段时间,找不到任何符合我需要/想做的东西.
我的目标是编写一个带有两个参数的脚本.它将搜索第一个参数(这是一个列表)并检测第二个参数是否已经在其中.例如:
list =/bin/foo:/ bin/random:random
添加到列表:/ bin/foobar
调用脚本将产生/ bin/foo:/ bin/random:random:/ bin/foobar的结果.
如果要添加到列表中的部件已经在列表中,那么原件的任何内容都不会更改.
我有一切工作,直到我想要修改我传递的参数.
...
if [ $RUN = 1 ]; then
echo $1
else
$1="$NEWLIST"
fi
exit 0
Run Code Online (Sandbox Code Playgroud)
然而,这产生了错误.它说找不到命令,并给我一个$ 1 ="$ NEWLIST"的行号.我在这做错了什么?如何修改$ 1?谢谢!
编辑:
$ PATH=/opt/bin:$PATH
$ ./scrip.sh PATH /user/opt/bin
$ /opt/bin:/user/opt/bin
Run Code Online (Sandbox Code Playgroud)
这是我想要的脚本结果.
gle*_*man 11
要设置位置参数$1, $2, ...,请使用以下set命令:
set foo bar baz
echo "$*" # ==> foo bar baz
echo $1 # ==> foo
set abc def
echo "$*" # ==> abc def
Run Code Online (Sandbox Code Playgroud)
如果要修改一个位置参数而不丢失其他位置参数,请先将它们存储在一个数组中:
set foo bar baz
args=( "$@" )
args[1]="BAR"
set "${args[@]}"
echo "$*" # ==> foo BAR baz
Run Code Online (Sandbox Code Playgroud)
adymitruk已经说过了,但是为什么要分配给一个参数。这不是能起到作用吗?
if `echo :$1: | grep ":$2:" 1>/dev/null 2>&1`
then
echo $1
else
echo $1:$2
fi
Run Code Online (Sandbox Code Playgroud)
也许这个:
list="1:2:3:4"
list=`./script $list 5`;echo $list
Run Code Online (Sandbox Code Playgroud)
大编辑:
使用此脚本(例如称为 listadd):
if ! `echo :${!1}: | grep ":$2:" 1>/dev/null 2>&1`
then
export $1=${!1}:$2
fi
Run Code Online (Sandbox Code Playgroud)
并从你的 shell 中获取它。结果如下(我希望这就是 wsa 的意图):
lorenzo@enzo:~$ list=1:2:3:4
lorenzo@enzo:~$ source listadd list 3
lorenzo@enzo:~$ echo $list
1:2:3:4
lorenzo@enzo:~$ source listadd list 5
lorenzo@enzo:~$ echo $list
1:2:3:4:5
lorenzo@enzo:~$ list2=a:b:c
lorenzo@enzo:~$ source listadd list2 a
lorenzo@enzo:~$ echo $list2
a:b:c
lorenzo@enzo:~$ source listadd list2 d
lorenzo@enzo:~$ echo $list2
a:b:c:d
Run Code Online (Sandbox Code Playgroud)