シェルスクリプトの作成中に引用されたワイルドカードを解釈する必要があります。
"R Programming*"
*
私はアスタリスクを文字通り受け入れたくありません。ワイルドカードとして解釈したいと思います。
"R Programming"*
sed
コマンドを使用して最初のものを2番目に変換できますか?私はそれが任意の文字列で動作したいと思います。
答え1
を含むシェル変数があり、現在の作業ディレクトリからinで始まるファイル名R programming*
に拡張する場合は、リクエストを使用して拡張をパターンとして処理し、ワイルドカード結果を実行できます。R programming
zsh
$~string
string="R programming*"
print -rC1 -- $~string
(またはprint -rC1 -- $~string(N)
一致するファイルがない場合、エラーの代わりに出力は表示されません。)
Inbash
および他のすべてのBourne様シェルワイルドカードは、デフォルトでは引用符なしの引数拡張(!)と単語の区切りで行われます。ここで、空白文字は後者を実行するデフォルト値なので、$IFS
ワイルドカードを実行する前に合計R programming*
に分割されますR
。これを防ぐためにprogramming*
値を変更できます。$IFS
string="R programming*"
IFS=
shopt -s failglob
printf '%s\n' $string
または、一致するファイルがない場合、出力はありません。
string="R programming*"
println() {
[ "$#" -eq 0 ] || printf '%s\n' "$@"
}
shopt -u failglob
shopt -s nullglob
IFS=
println $string
POSIX shでは、
string="R programming*"
IFS=
printf '%s\n' $string
一致するファイルがない場合は、R programming*
出力として表示されます(文字通り呼び出された単一のファイルがあるかのように)。これはBourneシェルから継承されたバグ機能であり、sまたはそれに対応する標準はR programming*
ありません。bash
failglob
nullglob