在shell,我進入一個單引號,然後回車,然後一系列的線,然後又單引號:IRIX的bash shell擴展表達的單引號,但不應該
[email protected]:/root > '
> @stat = lstat($ARGV[0]);
> if ([email protected]) {
if (@stat = lstat($ARGV[0]);) {
> print "nil\n";
> exit 0;
> }
> '
然而,如果您發現從shell來解釋輸出:
bash:
@stat = lstat($ARGV[0]);
if (@stat = lstat($ARGV[0]);) {
print "nil\n";
exit 0;
}
: command not found
[email protected]:/root > uname -a
IRIX64 aim 6.5 04091957 IP27
[email protected]:/root > echo $0
-bash
[email protected]:/root >
您注意到[email protected]
被轉換爲@stat = lstat($ARGV[0]);
應該如何跟隨着g shell程序應該如何編寫,以便它內部的perl程序能被字面解釋?
tramp_perl_file_attributes() {
\perl -e '
@stat = lstat($ARGV[0]);
if ([email protected]) {
print "nil\n";
exit 0;
}
if (($stat[2] & 0170000) == 0120000)
{
$type = readlink($ARGV[0]);
$type = "\"$type\"";
}
elsif (($stat[2] & 0170000) == 040000)
{
$type = "t";
}
else
{
$type = "nil"
};
$uid = ($ARGV[1] eq "integer") ? $stat[4] : "\"" . getpwuid($stat[4]) . "\"";
$gid = ($ARGV[1] eq "integer") ? $stat[5] : "\"" . getgrgid($stat[5]) . "\"";
printf(
"(%s %u %s %s (%u %u) (%u %u) (%u %u) %u.0 %u t (%u . %u) -1)\n",
$type,
$stat[3],
$uid,
$gid,
$stat[8] >> 16 & 0xffff,
$stat[8] & 0xffff,
$stat[9] >> 16 & 0xffff,
$stat[9] & 0xffff,
$stat[10] >> 16 & 0xffff,
$stat[10] & 0xffff,
$stat[7],
$stat[2],
$stat[1] >> 16 & 0xffff,
$stat[1] & 0xffff
);' "$1" "$2"
}
從bash手冊:「只有反斜槓(\\)和單引號可以引用歷史擴展字符。」 – 2010-07-23 20:43:49
這可能是如此,但看着OP的問題,您可以清楚地看到!@已擴展從歷史上看。我不知道*爲什麼*(因爲我同意單引號應該阻止),但它發生。我已經更新了我的答案,以更清楚地強調這一點。 – 2010-07-26 09:13:29