1
  # The **variable slicing** notation in the following conditional
  # needs some explanation: `${var#expr}` returns everything after
  # the match for 'expr' in the variable value (if any), and
  # `${var%expr}` returns everything that doesn't match (in this
  # case, just the very first character. You can also do this in
  # Bash with `${var:0:1}`, and you could use cut too: `cut -c1`.

これは実際にはどういう意味ですか?例を教えてもらえますか

4

3 に答える 3

1

あなたが引用した説明はまったく正確ではありません。このメカニズムにより、変数の値からプレフィックスまたはサフィックスを削除できます。

vnix$ v=foobar
vnix$ echo "${v#foo}"
bar
vnix$ echo "${v%bar}"
foo

式はグロブにすることができるため、静的な文字列に制限されません。

vnix$ echo "${v%b*}"
foo

最短ではなく最長の一致をトリミングするための##と%%もあります。

于 2012-11-22T21:03:04.623 に答える
1

簡単な例を次に示します。

#!/bin/bash

message="hello world!"
var1="hello"
var2="world!"
echo "${message#$var1}"
echo "${message%$var2}"
echo "${message%???}"
echo "${message}"

出力:

 world!
hello 
hello wor
hello world!
于 2012-11-22T21:03:52.030 に答える
1

質問で引用されたテキストはひどい説明です。これがsh言語標準からのテキストです:

${parameter%word}
    Remove Smallest Suffix Pattern. The word shall be expanded to produce a pattern.
    The parameter expansion shall then result in parameter, with the smallest portion
    of the suffix matched by the pattern deleted.
${parameter%%word}
    Remove Largest Suffix Pattern. The word shall be expanded to produce a pattern. 
    The parameter expansion shall then result in parameter, with the largest portion
    of the suffix matched by the pattern deleted.
${parameter#word}
    Remove Smallest Prefix Pattern. The word shall be expanded to produce a pattern.
    The parameter expansion shall then result in parameter, with the smallest portion
    of the prefix matched by the pattern deleted.
${parameter##word}
    Remove Largest Prefix Pattern. The word shall be expanded to produce a pattern.
    The parameter expansion shall then result in parameter, with the largest portion
    of the prefix matched by the pattern deleted. 
于 2012-11-23T16:19:54.640 に答える