それはタイプミスですか、それとも値の前に「$」がありませんか、つまり(2行目)
let "var=$value"
私が本当にそうあるべきだと思う
let var="$value"
シェルのデバッグ機能をオンにすることで、スクリプトを作成している間に多くの問題を解決できます。
set -vx
let "var= value"
set +vx
またはset -vx
、スクリプトの先頭近くに配置して、すべてのスクリプトがどのように処理されるかを確認します。
EDIT3または最初の行の-vx
後に置きます。#!/bin/bash
#!/bin/bash -vx
EDIT2最初のコメントを見逃しました。はい、line1も問題があるようです。これを試して
let value="$(awk 'NR==14' ${TEMP_DIR}/IR4723/count_part_UNVM.txt)"
cmd-substitution にバッククォートを使用することは、'New Kornshell Language' ~ 1995$( )
で非推奨として宣言されたことに注意してください。また、awk スクリプト (コマンドライン上) は、単一引用符または dbl 引用符で囲むことにより、単一の引数として提示する必要があることに注意してください。(ただし、「プログラム」にスペースが含まれていないため、引用符が必要かどうかは絶対にわかりません。) リビジョンが機能しない場合はprint --"value=XX${value}XX
、割り当ての後に追加し、上記の質問を編集して出力を表示します。
編集コメント/質問ごとに、いくつかのシェルスクリプトデバッガーがありますが、私はそれらを使用しません。本当に試してみたい場合は、Rosenberg ksh book debugger を検索してください。
これset -vx
は、実際には「実行トレース」と呼ばれるべきです。実行前のコードの行またはブロックが表示され、その後、変数がその値に展開されます。それは、人々が ksh スクリプトをデバッグする典型的な方法です。変数の個々の値を表示するなどのステートメントを追加することもできprint -- "var=XX${var}XX"
ますが、出力が台無しになる可能性があり、それらのステートメントを無効にする必要があり、スクリプトを再度編集する必要があります。
これが役立つことを願っています。