$ 1変数の設定を解除することは可能ですか?そうでない場合、man
で説明されている場所を見つけることができません。
[root@centos2 ~]# set bon jour
[root@centos2 ~]# echo $1$2
bonjour
[root@centos2 ~]# unset $1
[root@centos2 ~]# echo $1$2
bonjour
[root@centos2 ~]#
編集:
最後に、これが私が人間で見つけたものです(man set option double-dash
)すべての位置パラメータを空にします(そして、男性は単語「unset」を使用しました!)
このオプションの後に引数がない場合、定位置パラメーターは設定解除されます。
[root@centos2 ~]# echo $1
[root@centos2 ~]# set bon jour
[root@centos2 ~]# echo $1$2
bonjour
[root@centos2 ~]# set --
[root@centos2 ~]# echo $1$2
[root@centos2 ~]#
それを理解するのに役立つのは、@ Jeff Schallerの回答です。
設定を解除することはできませんが、$2
を$1
にシフトできます。
$ set bon jour
$ echo "$1$2"
bonjour
$ shift
$ echo "$1$2" # $2 is now empty
jour
shift
は、すべての位置パラメーターを1ステップ下にシフトします。たとえば、コマンドライン解析ループ(つまりnotgetopt
/getopts
を使用)で、$1
の値を繰り返し調べながら、各反復で位置パラメータをシフトします。位置パラメータの設定を解除することは珍しいことです。
ちなみに、unset
は値ではなく変数nameをとるため、unset $1
は実際には変数bon
を設定解除します(以前に設定されていた場合) )。
次のようにパラメータを再設定することにより、空できます。
$ set -- 1 2 3 4
$ printf -- "->%s<-\n" "$@"
->1<-
->2<-
->3<-
->4<-
$ set -- "" "${@:2}"
$ printf -- "->%s<-\n" "$@"
-><-
->2<-
->3<-
->4<-
すべての正しい技術的回答に加えて、あなたの質問には論理的な欠陥があることに気づくはずです。 $ 1、$ 2、...は、$ A、$ B、...のような名前付き変数の値ではなく、値のリストの1番目、2番目、...の値です。多分リストの最初の値は空の文字列ですが、私のリストに最初の値がないと言っても意味がありません。リストに最初の値がない場合、リストにはまったく値がないため、リストは空です。
したがって、リストの最初の値を「設定解除」することはできません。リストから削除できるのは最初の値のみです。次に、リストの前の2番目の値がリストの最初の値になり、前の3番目が2番目の値になります。これはまさにシフト演算子が行うことです。
いいえ、少なくとも直接ではありません。この構文は機能するはずですが、エラーが発生します。
$ set bon jour
$ echo $1 $2
$ unset 1
1: not a valid identifier
unset $variable
は通常間違いであり、unset variable
は意図したものでした。残念ながら、ここでは機能しません。