2

私はbashスクリプトを継承し(レガシーは素晴らしいものではありません!)、何が問題になっているのかを理解しようとしています。

問題のある行は次のとおりです。 while [ "${\(\#\)}" -gt 0 ] ; do

実行しようとすると、「不正な置換」エラーメッセージが表示されます。argsの数がゼロより大きいかどうかを尋ねようとしていることは確かですが、あなたもそれを知っています。

それがうまくいったかどうかはわかりません。バックスラッシュが足りないか、多すぎるか、かっこがそこに属していないのではないかと思います。私はこれらのいくつかを試しましたが、運がありませんでした。

どんな啓蒙もありがたいです。

4

1 に答える 1

2

元の行はあなたが言及したエラーメッセージ(不正な置換)を生成しますが、かっこを削除するだけで問題を解決できます。たとえば、次のファイルを使用しますwhile-num

#!/bin/bash
while [ "${#}" -gt 0 ] ; do
    echo $1
    shift
done

(例)で呼び出され ./while-num 18173.msg 18179.msg 18201.msgます

18173.msg
18179.msg
18201.msg

私のUbuntu-12システムでは、最初の行が。の場合と同じ出力が得られます#!/bin/sh。(Ubuntuでは、デフォルトのシェルはbashではなくダッシュです。)while行がに変更された場合も正常に機能します(つまり、数値を返すwhile[ $# -gt 0 ] ; doため、引用符と中括弧は必要ありません)。$#

于 2012-09-15T22:40:35.207 に答える