2

Bash で (2 番目のスクリプトを呼び出さずに) 変数をコマンド ライン引数であるかのように解析する方法はありますか? それらを引用符などでグループ化できるようにしたいと思います。

例:

this="'hi there' name here"

for argument in $this; do
    echo "$argument"
done

印刷する必要があります(ただし、明らかに印刷されません)

hi there
name
here
4

3 に答える 3

2

私は自分で半分答えを出しました。次のコードを検討してください。

this="'hi there' name here"

eval args=($this)

for arg in "${args[@]}"; do
    echo "$arg"
done

の目的の出力を印刷します

hi there
name
here
于 2013-10-26T07:41:16.113 に答える
1

使用gsed -r:

echo "$this" | gsed -r 's/("[^"]*"|[^" ]*) */\1\n/g'
"hi there"
name
here

使用egrep -o:

echo "$this" | egrep -o '"[^"]*"|[^" ]+'
"hi there"
name
here

純粋な BASH の方法:

this="'hi there' name here"
s="$this"
while [[ "$s" =~ \"[^\"]*\"|[^\"\ ]+ ]]; do
    echo ${BASH_REMATCH[0]}
    l=$((${#BASH_REMATCH[0]}+1))
    s="${s:$l}"
done

"hi there"
name
here
于 2013-10-26T09:46:03.907 に答える