0

これは私のスクリプトです。

#!/usr/bin/sh


isql -UXx -Pxxxxxx <<!
set nocount on
use xxxx
go
select count(*) from BSC  where bsc='$1'
go
!

exit

私はこのスクリプトを次のように実行しています:

temp2.sh 0000

出力は0ですが、クエリを手動で実行すると、出力は1になります。これは正しいです。ここでの問題は、コマンド ライン引数 $1 がクエリに渡されないことです。

どうすればこれを達成できますか? 私はこれらすべての可能性を試しました:

bsc='$1'- output is 0
bsc="$1"- output is 0
bsc=`$1`- Syntax error
bsc="'$1'"- output is 0

私はsolaris unixを使用しており、DBはsybaseです。

4

2 に答える 2

0

問題は解決しました:

スクリプトを次のように呼び出す代わりに

temp2.sh 0000 

私はそれを次のように呼びました:

temp2.sh "0000" 
于 2012-08-07T10:32:25.827 に答える
0

ここでの問題は、クエリ内の一重引用符がシェルによって解釈されていることだと思います。

select count(*) from BSC  where bsc='$1'

と解釈されている

select count(*) from BSC  where bsc=$1

リテラル文字列として。

これをテストするために利用できるものはありませんが、次のように置き換えてみてください

select count(*) from BSC  where bsc="'$1'"

二重引用符は一重引用符を文字として出力する必要があると思います(そして、現在テストできるものがないことをもう一度強調します)。したがって、次のように解釈されます。

select count(*) from BSC  where bsc='0000'

あなたが提供したコマンドライン入力を考えてください。

于 2012-08-07T05:48:21.847 に答える