4

私は(私の最初の)シェルスクリプトを書いていますが、柔軟性のために変数を使用したいと考えています。これは、検索されたさまざまな例に従って私が書いたスクリプトの一部です。

#!/bin/sh
#
jar_path="/sbclocal/apps/blablabla"
echo $jar_path            # <- OK
echo ${jar_path}          # <- OK
echo $jar_path/jar        # <- /jarlocal/apps/blablabla
echo "$jar_path/jar"      # <- /jarlocal/apps/blablabla
echo ${jar_path}/jar      # <- /jarlocal/apps/blablabla
echo "${jar_path}/jar"    # <- /jarlocal/apps/blablabla

最後の行で、「/sbclocal/apps/blablabla/jar」を取得することを期待していますが、取得したのは「/jarlocal/apps/blablabla」です! したがって、連結の代わりに、変数文字列の先頭が定数部分に置き換えられます。これは最終的に期待できます!

jar パラメーター内にはより複雑な連結もあり、確実に理解できない方法で壊れていますが、問題は同じだと思います。

ここで何が間違っていますか?

UPD:私が試したさまざまなアプローチを示すために編集され、すべて同じ結果が得られました。

UPD:私は2つの変数でも試しました.奇妙なことは、次のようなものを書くと、最初の変数が空のように表示されないことです.

echo $var1$var2
echo ${var1}${var2}
echo ${var1}+${var2}

これはクレイジーです。これははるかに高速になるため、あきらめて古い単純なコピーアンドペーストを使用すると思います。

4

1 に答える 1

4

コメントとして入れたいと思います...

$ ./var.sh 
/sbclocal/apps/blablabla
/sbclocal/apps/blablabla
/sbclocal/apps/blablabla/jar
/sbclocal/apps/blablabla/jar
/sbclocal/apps/blablabla/jar
/sbclocal/apps/blablabla/jar

私が言ったように、あなたのスクリプトは私にとって完璧に機能します。チェックするもの:

まず、shebangをに変更して#!/bin/sh -xデバッグを有効にし、出力を確認します。

次に、実行file var.shして行末を確認します。期待される結果は次のようになります。

$ file var.sh 
var.sh: POSIX shell script text executable

dos2unixまたはを使用してUNIX形式に変換しますfromdos

于 2013-02-21T12:53:41.750 に答える