1

コマンド:

value=${value%?}

変数から最後の文字を削除します。スクリプト内から機能しない論理的な理由はありますか? 私のスクリプトでは、何の効果もありません。

if [[ $line =~ "What I want" ]]
    then
            if [[ $CURRENT -eq 3 ]]
            then
                    echo  "line is " $line 
                    value=`echo "$line" | awk '{print $4}'`
                    echo "value = "$value   
                    value=${value%?}
                    echo "value = $value "

                    break
            fi
fi

スクリプト全体を投稿することはできませんが、これは私が参照する部分です. ループには正しく入っていますが、2 つの echo $value 行は同じものを返します。

編集 - この質問はまだ残っています。このコードは、ターミナルでは問題なく動作しますが、スクリプトではすべて一緒に失敗します。

4

2 に答える 2

2

Echo は、次の行の $value に余分な行文字を追加します。

value=`echo "$line" | awk '{print $4}'`

そして、余分な文字は で削除さ%?れるので、何も変わらないようです。

代わりに試してみてください。これは文字列echo -nに追加されません\n:

value=`echo -n "$line" | awk '{print $4}'`
于 2012-10-08T09:26:41.897 に答える
0

ファイル全体ではなく、コードの関連部分のみを提供したため、ファイルの最初の行が「 #!/bin/sh 」であると仮定します。これはあなたの問題です。あなたがやろうとしていること (パラメーター展開) は bash に固有のものであるため、/bin/shがシンボリック リンクを介して bash を指していない限り、bash パラメーター展開を理解しないシェルでスクリプトを実行しています。

/bin/sh が実際に何であるかを確認するには、ls -l /bin/shを実行します。この状況を改善するには、上部の「シバン」を「#!/bin/bash」に変更して、スクリプトを強制的に bash で実行します。

于 2012-10-11T17:30:10.147 に答える