[解決済み] bashで特殊な変数(例: ~チルダ)を手動で展開する方法
2022-04-23 16:50:13
質問
bashスクリプトに次のような値を持つ変数があります。
~/a/b/c
展開されないチルダであることに注意してください。この変数($VARと呼ぶ)に対してls -ltを実行すると、そのようなディレクトリは得られません。この変数を実行せずに、bashに解釈/拡張させたいのです。言い換えれば、bashにevalを実行させたいのですが、評価されたコマンドは実行されません。これはbashで可能ですか?
どのようにして、これを展開せずにスクリプトに渡すことができたのでしょうか?引数を二重引用符で囲んで渡しました。
このコマンドを試してみてください。
ls -lt "~"
これはまさに私が置かれている状況です。チルダを展開させたいのです。つまり、この2つのコマンドを同じにするには、magicを何に置き換えたらいいのでしょうか。
ls -lt ~/abc/def/ghi
そして
ls -lt $(magic "~/abc/def/ghi")
なお、~/abc/def/ghiは存在してもしなくてもかまいません。
どのように解決するのですか?
StackOverflowの性質上、この回答を受け付けないようにすることはできませんが、これを投稿してから5年の間に、私が認めた初歩的でかなり悪い回答よりもはるかに良い回答がありました(私は若かったので殺さないで下さいね)。
このスレッドにある他の解決策は、より安全で優れた解決策です。できれば、この2つのどちらかを選びたいところです。
歴史的な目的のためのオリジナルの回答(ただし、これを使わないでください。)
間違っていなければ
"~"
は、リテラル文字列として扱われるため、そのような方法でbashスクリプトによって展開されることはありません。
"~"
. 強制的に展開するには
eval
このように
#!/bin/bash
homedir=~
eval homedir=$homedir
echo $homedir # prints home path
または、単に
${HOME}
ユーザーのホームディレクトリが必要な場合。
関連
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] Bashで文字列変数を連結する方法
-
[解決済み] Bashで文字列が部分文字列を含むかどうかをチェックする方法
-
[解決済み] Bashスクリプトからプログラムが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで文字列をデリミターで分割するには?
-
[解決済み] Bashでコマンドライン引数を解析するには?
-
[解決済み] Bashでコマンドの出力に変数を設定するにはどうすればよいですか?
-
[解決済み] Bashで変数が設定されているかどうかを確認する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] バッシュ Vim.NET」が表示されたらVimを終了させる Warning: 出力先が端末でない"
-
[解決済み] Bashで文字列から改行を削除する方法
-
[解決済み] rsyncです。--include-from vs. --exclude-from 実際の違いは何ですか?
-
[解決済み] ssh / リモートbashコマンドでシングルクォート文字をエスケープするにはどうすればよいですか?
-
[解決済み] echoコマンドでパイピングが効かない [重複]。
-
[解決済み] bash スクリプトを実行しているドッカーエントリーポイントが "パーミッション拒否" になる
-
[解決済み] プロジェクトからすべての .pyc ファイルを削除するにはどうすればよいですか?
-
[解決済み] cygwin の ssh が終了時に "Killed by signal 1" と表示される
-
[解決済み] 絶対パスと論理パスの違い
-
[解決済み] bashスクリプトでfindコマンドを使用する