Bash で (2 番目のスクリプトを呼び出さずに) 変数をコマンド ライン引数であるかのように解析する方法はありますか? それらを引用符などでグループ化できるようにしたいと思います。
例:
this="'hi there' name here"
for argument in $this; do
echo "$argument"
done
印刷する必要があります(ただし、明らかに印刷されません)
hi there
name
here
私は自分で半分答えを出しました。次のコードを検討してください。
this="'hi there' name here"
eval args=($this)
for arg in "${args[@]}"; do
echo "$arg"
done
の目的の出力を印刷します
hi there
name
here
使用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