0

シェルスクリプトでの変数置換について困惑しています。これが取り引きです:私は次のスクリプトを持っています。

if [ -d ~someone/Desktop ]
then
    echo exist
fi

ユーザー「誰か」がホームディレクトリの下に「デスクトップ」ディレクトリを持っているかどうかを判断します。ただし、誰かを他の変数に置き換えると、正しくなくなります。下記参照、

var=someone
if [ -d ~${var}/Desktop ]
then
    echo exist
fi

ユーザー「someone」はデスクトップディレクトリを持っていますが、出力には存在しません。なぜこれが起こったのか誰か教えてもらえますか?

4

2 に答える 2

1
var=someone
if [ -d $(eval echo ~${var})/Desktop ]
then
    echo exist
fi
于 2012-11-12T01:06:41.113 に答える
0

~userはシェルによって解釈される特別な式です(説明については、man bash->チルダ拡張を参照してください)。あなたの場合、チルダの後にユーザー名が続かないので、通常の変数展開が行われ、通常のではなく~$varリテラルに展開されます。~someone/home/of/someone

ユーザーのホームディレクトリを取得する最も簡単な方法は、次の場所からgrepすることです/etc/passwd

grep "^$var:" /etc/passwd | cut -d: -f6
于 2012-11-12T00:57:50.757 に答える