2017-10-24 11 views
2
#!/bin/bash 

show="ls -al /" 
IFS=$'\n' 
$show 

結果はbash: ls -al /: No such file or directoryのようになります。

シェルは期待される結果を返すことができません。

IFSを$' \n'(空白を追加したことに注意してください)と変更しても問題ありません。

私はIFSについて多くの知識を持っていませんが、誰かが説明することができますか? IFSはそれにスペースを持っていないし、あなたの変数にスペースが単語を誘発しないので、文字列全体ls -al /は、シェルによってコマンド名として扱われている

show="ls -al /" 
IFS=$'\n' 
$show 

:最初のケースで

+0

http://mywiki.wooledge.org/WordSplitting –

答えて

3

分割する。これは単語の分割を完全に抑制する "$ show"というコマンドを書くことと同じくらい良いことです。

スペースがIFSの一部であるため、後者の場合、単語の分割が行われます。


も参照してください:

+0

私は、ファイルにそれぞれの行を読み取るためにIFSを変更 'a:1 \ n b:2' 私はbashでそれを読む良い方法が分かりませんが、良いアイデアはありますか? – daixiang0

関連する問題