1

私は簡単なスクリプトを持っています:

#!/bin/sh
#NOTE - this script does not work!
#column=${1:-1}
column=1+1
awk '{print $'$column'}'

しかし、実行すると

ls -la | ~/test/Column.sh

いつも受け取っています

1
1
1
1

何の問題?

4

2 に答える 2

3

スクリプトは次と同等です。

awk '{print $1+1}'

ls -alAwk は、例の出力の最初の列 (ファイル タイプとモード ビット)に 1 つ追加しようとします。これは数値ではないため、0 に変換されます。1 を 0 に足すと、出力が得られます。ここ
を参照してください:

有効な数値として解釈できない文字列はゼロに変換されます。

シェルに数値を計算させたい場合は、次を試してください。

column=$(expr 1 + 1)

あるいは

column=$((1 + 1))
于 2011-12-07T13:56:01.223 に答える
1

これが純粋な bourne シェルの場合、次の代わりに:

column=1+1

これを試して:

column=`expr 1+1`

bash の場合は、次のようになります。

column=$[1+1]

ここを参照してください: http://linuxreviews.org/beginner/bash_GNU_Bourne-Again_SHell_Reference/#toc12

于 2011-12-07T13:56:59.563 に答える