私は簡単なスクリプトを持っています:
#!/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
何の問題?
私は簡単なスクリプトを持っています:
#!/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
何の問題?
スクリプトは次と同等です。
awk '{print $1+1}'
ls -al
Awk は、例の出力の最初の列 (ファイル タイプとモード ビット)に 1 つ追加しようとします。これは数値ではないため、0 に変換されます。1 を 0 に足すと、出力が得られます。ここ
を参照してください:
有効な数値として解釈できない文字列はゼロに変換されます。
シェルに数値を計算させたい場合は、次を試してください。
column=$(expr 1 + 1)
あるいは
column=$((1 + 1))
これが純粋な bourne シェルの場合、次の代わりに:
column=1+1
これを試して:
column=`expr 1+1`
bash の場合は、次のようになります。
column=$[1+1]
ここを参照してください: http://linuxreviews.org/beginner/bash_GNU_Bourne-Again_SHell_Reference/#toc12