0

ジョブ送信スクリプトをデバッグしようとしたときに、バグを次のように絞り込むことにしました。

    [testuser@bes ~]$ var=( 1 foo1*bar4 echo 1*4=4 )
    [testuser@bes ~]$ echo "${var[@]}"
    1 foo1*bar4 echo 1*4=4
    [testuser@bes ~]$ cd /data/testuser/jobs/example/a16162/
    [testuser@bes a16162]$ var=( 1 foo1*bar4 echo 1*4=4 )
    [testuser@bes a16162]$ echo "${var[@]}"
    1 foo1-bar4 foo1*bar4 echo 1*4=4
    [testuser@bes a16162]$

これは、新鮮なbashセッションのノーカットのトランスクリプトです。誰かがそれがどのように機能するか考えていますか?これは私が今まで聞いたことがないbashの古風な機能ですか、それとも本当に奇妙なバグですか?

バージョン(はい、私はそれが時代遅れであることを知っています):

GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.

Linux bes 2.6.18-194.11.3.el5 #1 SMP Mon Aug 30 16:19:16 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux

awk編集:これは、ユーザーが渡した配列を処理する必要があるもののためのものであり、かなり厄介なハックのトリプレットよりも、この方法を使用したいと思います。それらは些細な「要素2の抽出」のようなものであるため、配列を使用する方が適切に思えます。

4

2 に答える 2

2

アレイが形成されるとき、グロブはまだグロブされています。これが必要ない場合は、引用するかエスケープする必要があります。

$ var=( 1 "foo1*bar4" echo "1*4=4" )
于 2012-06-12T23:21:18.323 に答える
1

何がls /data/testuser/jobs/example/a16162/foo1*明らかになりますか?

でファイル名のグロブを無効にしset -f、で再度有効にすることができますset +f

于 2012-06-13T05:31:34.033 に答える