2016-12-10 5 views
0

を認識していますが、 "*" charを持つrgumentを渡している間、私のシェルはを "ls myfolder"コマンドとして認識しますので、このコマンドの結果をstdoutに出力してください。は、UNIXでコマンドとして*

この問題を解決する方法はありますか?

1 #!/bin/bash 
    2 
    3 if [ $# -lt 3 ]; then 
    4 echo "Some arguments are missing" 
    5 fi 
    6 
    7 #passing "*" as argument 
    8 echo $2 
    9 # the result is file1.txt file2.txt...and more.. 

答えて

0

パラメータの展開では、引用符を付けないとパス名展開が行われます。

#!/bin/bash 

if [ $# -lt 3 ]; then 
    echo "Some arguments are missing" 
fi 

# passing "*" as argument 
echo "$2" 
1

スクリプトが呼び出される前に、bashが*を拡大、すなわち、$2 VARはそのディレクトリにあるすべてのものが移入されます。

./script.sh \* 
+0

私はこのようなスクリプトを./test.sh "blabla" "blabla *"と呼んでいますが、それでもディレクトリ内のすべてのものを入力します。 –

0

コールスクリプトのいずれか

./script \* 
として:あなたはこのようなスクリプトを呼び出し、VARとして *をしたいreall場合

./script.sh with every file listed separated by spaces as arguments 

それは呼び出し元と同じです

または

./script '*' 

*に関連する特別な意味を削除してグロビングを防止します。

関連する問題